【发布时间】:2017-08-16 01:46:20
【问题描述】:
我正在尝试在 pandas groupby 上运行聚合函数,其中我将其中一列作为 kwarg 或 arg 传递。我可以通过传递一个常量来做到这一点,但不知道如何传递一个列值。
例如
import pandas as pd
import datetime
import numpy as np
def sum_corr(vector, cor):
a = vector.tolist()
radicand = sum([a[i]*a[j] * (1 if i == j else cor) for i in range(len(a)) for j in range(len(a))])
return np.sqrt(radicand)
my_table = pd.DataFrame({'Date':4*pd.bdate_range(datetime.datetime(2017,1,1),periods=4).tolist(),
'Name':[i for i in 'abcd' for j in range(4)],
'corr':[i for i in [0,1,.5,.8] for j in range(4)],
'vals':[1,2,3,4]*4})
我可以用一个常量来调用它没问题
print(my_table.groupby(['Name','corr'],as_index=False).agg(sum_corr,**{'cor':0}))
Name corr vals
0 a 0.0 5.477226
1 b 1.0 5.477226
2 c 0.5 5.477226
3 d 0.8 5.477226
我想在 'corr' 列中调用这个传递类似于
print(my_table.groupby(['Name','corr'],as_index=False).agg(sum_corr,**{'cor':my_table['corr']}))
Name corr vals
0 a 0.0 5.477226
1 b 1.0 10
2 c 0.5 8.062258
3 d 0.8 9.273618
提前致谢!
【问题讨论】:
标签: pandas group-by aggregate keyword-argument