我试图在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 groupby上运行聚合函数,在该函数中我将其中一列作为kwarg或arg传递。我可以通过传递常量来做到这一点,但无法弄清楚如何传递列值。 ...
这里的问题不是传递列,问题是sum_corr()在传递列时返回一个数组,如果要在agg()中将其用于groupby对象,则应返回聚合(标量)值。