如何使用 pandas 分组依据来应用数组函数(前一行计算)
How to apply array function (previous row calculation) with pandas group by
我有数组函数,可以应用于我从这个 post 获得的 pandas 数据框
这是我从 post
得到的函数
def prev_max_dist(df_col):
v = df_col.astype(float).values
s = v.size
i = np.arange(s)
v = np.full((s, s), v)
v = v - v.T
v[np.triu_indices(s)] = np.nan
r = i - (s - np.argmax(v[:, ::-1] >= 0, axis=1) - 1)
r[r < 0] = 0
return r
此函数可以应用于来自 post 的数据
但此功能不适用于 group by pandas
我有这样的数据
Symbol Day Close
a 1 1
a 2 2
a 3 6
a 4 4
a 5 5
a 6 4
a 7 5
b 1 1
b 2 2
b 3 6
b 4 4
b 5 5
b 6 4
b 7 5
而且我希望这个函数可以应用于符号 A 和 B。
在groupby
/apply
之后使用explode
:
您的数据框必须在操作前按 ['Symbol', 'Day']
个值排序。
df['pnlr'] = df.groupby('Symbol')['Close'].apply(prev_max_dist).explode().values
>>> df
Symbol Day Close pnlr
0 a 1 1 0
1 a 2 2 0
2 a 3 6 0
3 a 4 4 1
4 a 5 5 2
5 a 6 4 1
6 a 7 5 2
7 b 1 1 0
8 b 2 2 0
9 b 3 6 0
10 b 4 4 1
11 b 5 5 2
12 b 6 4 1
13 b 7 5 2
我有数组函数,可以应用于我从这个 post 获得的 pandas 数据框
def prev_max_dist(df_col):
v = df_col.astype(float).values
s = v.size
i = np.arange(s)
v = np.full((s, s), v)
v = v - v.T
v[np.triu_indices(s)] = np.nan
r = i - (s - np.argmax(v[:, ::-1] >= 0, axis=1) - 1)
r[r < 0] = 0
return r
此函数可以应用于来自 post 的数据 但此功能不适用于 group by pandas 我有这样的数据
Symbol Day Close
a 1 1
a 2 2
a 3 6
a 4 4
a 5 5
a 6 4
a 7 5
b 1 1
b 2 2
b 3 6
b 4 4
b 5 5
b 6 4
b 7 5
而且我希望这个函数可以应用于符号 A 和 B。
在groupby
/apply
之后使用explode
:
您的数据框必须在操作前按 ['Symbol', 'Day']
个值排序。
df['pnlr'] = df.groupby('Symbol')['Close'].apply(prev_max_dist).explode().values
>>> df
Symbol Day Close pnlr
0 a 1 1 0
1 a 2 2 0
2 a 3 6 0
3 a 4 4 1
4 a 5 5 2
5 a 6 4 1
6 a 7 5 2
7 b 1 1 0
8 b 2 2 0
9 b 3 6 0
10 b 4 4 1
11 b 5 5 2
12 b 6 4 1
13 b 7 5 2