Tôi đang cố sử dụng rollapply với công thức yêu cầu 2 đối số. Theo hiểu biết của tôi là cách duy nhất (trừ khi bạn tạo ra các công thức từ đầu) để tính toán kendall tau tương quan, với sự điều chỉnh cà vạt chuẩn bao gồm là:Sử dụng rolling_apply với hàm yêu cầu 2 đối số trong Pandas
>>> import scipy
>>> x = [5.05, 6.75, 3.21, 2.66]
>>> y = [1.65, 26.5, -5.93, 7.96]
>>> z = [1.65, 2.64, 2.64, 6.95]
>>> print scipy.stats.stats.kendalltau(x, y)[0]
0.333333333333
Tôi cũng nhận thức được vấn đề với rollapply và lấy hai tham số, như tài liệu ở đây:
Tuy nhiên, tôi đang cố gắng tìm cách để thực hiện phép tính kendalltau trên một khung dữ liệu với nhiều cột trên cơ sở luân phiên.
dataframe của tôi là một cái gì đó như thế này
A = pd.DataFrame([[1, 5, 1], [2, 4, 1], [3, 3, 1], [4, 2, 1], [5, 1, 1]],
columns=['A', 'B', 'C'], index = [1, 2, 3, 4, 5])
Đang cố gắng để tạo ra một chức năng mà thực hiện điều này
In [1]:function(A, 3) # A is df, 3 is the rolling window
Out[2]:
A B C AB AC BC
1 1 5 2 NaN NaN NaN
2 2 4 4 NaN NaN NaN
3 3 3 1 -0.99 -0.33 0.33
4 4 2 2 -0.99 -0.33 0.33
5 5 1 4 -0.99 0.99 -0.99
Trong một cách tiếp cận rất sơ bộ tôi giải trí ý tưởng về việc xác định chức năng như thế này:
def tau1(x):
y = np.array(A['A']) # keep one column fix and run it in the other two
tau, p_value = sp.stats.kendalltau(x, y)
return tau
A['AB'] = pd.rolling_apply(A['B'], 3, lambda x: tau1(x))
Tắt khóa học Nó không hoạt động. Tôi nhận được:
ValueError: all keys need to be the same shape
Tôi hiểu không phải là vấn đề tầm thường. Tôi đánh giá cao bất kỳ đầu vào nào.
tuyệt vời. Cảm ơn rất nhiều!. Có giới hạn về số cột tôi nên ghi nhớ không? Các hàm itertools này tuyệt vời và cao hơn mức của tôi ... để hỏi bất kỳ câu hỏi thông minh bổ sung nào. – hernanavella
Số lượng kết hợp tăng lên như 'n ** 2', do đó' tau' được gọi theo thứ tự 'n ** 2 * m' lần trong đó' m = len (A) '. Vì vậy, điều này có thể mất một lúc, đặc biệt nếu bạn có nhiều cột. [Sử dụng 'itertools'] (https://docs.python.org/2/library/itertools.html) thực sự khá thú vị; học tập nó không phải là khó khăn và cũng có giá trị thời gian. – unutbu
60K Hàng x 4 cột ~ 7 phút – hernanavella