Pandas 适用于按帧分组和完整数据帧
Pandas apply on groupby-frames and on full dataframe
给定一个 Pandas 数据框,我通过应用自定义函数的 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: ("'Series' object has no attribute 'val'", 'occurred
at index cls')
我可以创建一个常量虚拟变量并对其进行分组以获得我想要的结果 - 但肯定会有更简单的方法来做到这一点。为什么pandas认为没有groupby的frame是一个系列,if type(xxx)returnspandas.core.frame.DataFrame?我在 pandas 0.23.4; python3.6.
xxx['dummy']='test'
xxx.groupby('dummy').apply(myagg)
MaxV MeanV
dummy
test 0 3 2.0
似乎使用虚拟函数就可以了。
def dummy(dat):
return 1
xxx.groupby(dummy).apply(myagg)
结果如题。无需修改数据框。
给定一个 Pandas 数据框,我通过应用自定义函数的 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: ("'Series' object has no attribute 'val'", 'occurred at index cls')
我可以创建一个常量虚拟变量并对其进行分组以获得我想要的结果 - 但肯定会有更简单的方法来做到这一点。为什么pandas认为没有groupby的frame是一个系列,if type(xxx)returnspandas.core.frame.DataFrame?我在 pandas 0.23.4; python3.6.
xxx['dummy']='test'
xxx.groupby('dummy').apply(myagg)
MaxV MeanV
dummy
test 0 3 2.0
似乎使用虚拟函数就可以了。
def dummy(dat):
return 1
xxx.groupby(dummy).apply(myagg)
结果如题。无需修改数据框。