计算 Pandas 数据框中所有列的扩展平均值

4

我的数据框看起来像这样:

    cat1     cat2     x1     x2     x3      x4      x5      x6   . . .
0    str     str    float  float   float  float   float   float  . . .
1    str     str    float  float   float  float   float   float  . . .
.     .       .       .      .       .       .       .       .   . . .
.     .       .       .      .       .       .       .       .   . . .

我尝试过这个:

df = df.groupby(['cat1','cat2']).apply(pd.expanding_mean)

但这给我带来了一个

问题


ValueError: could not convert string to float: 

唯一的字符串在groupby中。这样做是可以的,但不符合我的需求。
df = df.groupby(['cat1','cat2']).mean()

你能否只对列进行索引:df[df.columns[2:]].apply(pd.expanding_mean) - EdChum
2
我不确定这是否符合您的需求,但请尝试使用 df = df.groupby(['cat1','cat2']).transform(pd.expanding_mean) - Fabio Lamanna
@Fiabetto 的转换使我的前几列消失了,但似乎其余的数据可能是正确的。 - user2891518
@Fiabetto 所以数值是正确的。这两个变量分别是年份和姓名。为什么 transform 能够工作,有没有办法在事后不必重新添加列的情况下使其工作? - user2891518
1
也许可以稍微改进一下@Fiabetto的答案:df.iloc[:,2:] = df.groupby(['cat1','cat2']).transform(pd.expanding_mean),这将保留前两列并覆盖其他列(假设这是您所要求的?)。@Fiabetto可能会想把它写成一个答案,因为这似乎是解决问题的不错方法。 - JohnE
显示剩余3条评论
1个回答

3
感谢其他用户的努力,以下可能是一个解决方案:
df.iloc[:,2:] = df.groupby(['cat1','cat2']).transform(pd.expanding_mean)

保留第一、二列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接