我有一個非常簡單的問題。我有一個這樣的資料框
In [19]: df = DataFrame(randn(10,2),columns=list('A'))
In [20]: df
Out[20]:
A
0 0.958465
1 -0.769077
2 0.598059
3 0.290926
4 -0.248910
5 -1.352096
6 0.009125
7 -0.993082
8 -0.593704
9 0.523332
我想創建一個包含以下資訊的新列B :
A B
0 0.958465
1 -0.769077 A1*A1 2*A0*A2
2 0.598059 A2*A2 2*A1*A3
3 0.290926 A3*A3 2*A2*A4
4 -0.248910 A4*A4 2*A3*A5
5 -1.352096 ...
6 0.009125 ...
7 -0.993082 ...
8 -0.593704 ...
9 0.523332 ...
這是一種卷積或自相關,但每次都使用不同的視窗。如何在 Pandas 中定義這樣的公式?
第二個問題:如何使公式中涉及的點數變變數(在示例中我只是使用前一個點和下一個點進行計算,但是我如何傳遞一個變數來告訴熊貓點數我想用于計算)?
uj5u.com熱心網友回復:
您可以制作這樣的函式來允許可變數量的滯后。
def func(s, lags=1):
return sum(s.shift(lag) * s.shift(-lag) for lag in range(lags 1))
df = pd.DataFrame({"A": [0.958465, -0.769077, 0.598059, 0.290926, -0.248910, -1.352096, 0.009125, 0.993082, -0.593704, 0.523332]})
df["B"] = func(df["A"], 1) # takes 1 point on either side
df["C"] = func(df["A"], 2) # takes 2 points on either side
uj5u.com熱心網友回復:
df['B'] df['A']**2 2 * df['A'].shift() * df['A'].shift(-1)
df
A B
0 0.958465 NaN
1 -0.769077 1.737917
2 0.598059 -0.089814
3 0.290926 -0.213088
4 -0.248910 -0.724764
5 -1.352096 1.823621
6 0.009125 2.685568
7 -0.993082 0.975377
8 -0.593704 -0.686939
9 0.523332 NaN
uj5u.com熱心網友回復:
我認為,它也可以在沒有應用的情況下完成,以防:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 1), columns=['A'])
df['B'] = df['A'] ** 2 * df['A'].shift(periods=1) * df['A'].shift(periods=-1)
print(df)
輸出:
A B
0 0.383006 NaN
1 -1.240859 -0.469964
2 -0.796920 -0.393244
3 0.499011 0.358630
4 -1.807221 -0.701899
5 -0.430667 0.296360
6 -0.884149 0.475958
7 -1.413762 3.492830
8 -1.976511 5.939588
9 -1.075428 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/464365.html
