给出一个熊猫数据框,我通过应用自定义函数的groupby表达式评估几个变量。工作正常(暂时忽略第二个0-index-column),但我也想将该函数应用于整个DataFrame。
xxx = pd.DataFrame([['A',1],['A',2],['B',3]],columns=(['cls','val']))
xxx
cls val
0 A 1
1 A 2
2 B 3
def myagg(dat):
vmax=dat.val.max()
vmean=dat.val.mean()
return pd.DataFrame([[vmax,vmean]],columns=(['MaxV','MeanV']))
xxx.groupby('cls').apply(myagg)
收益
MaxV MeanV
cls
A 0 2 1.5
B 0 3 3.0
但是xxx.apply(myagg)抛出:
AttributeError :(““系列”对象没有属性“ val””,发生 在索引cls')
我可以创建一个常量虚拟变量,并对其进行分组以接收所需的结果-但是肯定会有更简单的方法来实现。如果type(xxx)返回pandas.core.frame.DataFrame,为什么熊猫会将没有groupby的帧视为一个序列?我在熊猫0.23.4上; python 3.6。
xxx['dummy']='test'
xxx.groupby('dummy').apply(myagg)
MaxV MeanV
dummy
test 0 3 2.0
答案 0 :(得分:0)
使用伪函数似乎可以解决问题。
areStatesEqual()
,结果与问题相同。无需修改数据框。