0

给定一个 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' 对象没有属性 'val'", '发生在索引 cls')

我可以创建一个常量虚拟变量并按它分组以接收我希望的结果 - 但肯定会有更简单的方法来做到这一点。如果 type(xxx) 返回 pandas.core.frame.DataFrame,为什么 pandas 会将没有 groupby 的帧视为一个系列?我在熊猫 0.23.4;蟒蛇 3.6。

xxx['dummy']='test'
xxx.groupby('dummy').apply(myagg)


         MaxV   MeanV
dummy           
test    0   3   2.0
4

1 回答 1

0

似乎使用虚拟函数可以解决问题。

def dummy(dat):
    return 1

xxx.groupby(dummy).apply(myagg)

结果和问题一样。无需修改数据框。

于 2020-01-10T19:46:12.090 回答