pandas aggregate dataframe只返回一列

2024-10-01 07:20:09 发布

您现在位置:Python中文网/ 问答频道 /正文

怎么了。在

我有一个像这样的熊猫数据帧(df):

     foo  id1  bar  id2
0    8.0   1  NULL   1
1    5.0   1  NULL   1
2    3.0   1  NULL   1
3    4.0   1     1   2
4    7.0   1     3   2
5    9.0   1     4   3
6    5.0   1     2   3
7    7.0   1     3   1
...

我想按id1和id2分组,试着得到foo和bar的平均值。在

我的代码:

^{pr2}$

我得到的几乎是我所期望的:

            foo
id1 id2          
1  1   5.750000
   2   7.000000
2  1   3.500000
   2   1.500000
3  1   6.000000
   2   5.333333

“foo”列中的值正是我要查找的平均值(意味着),但我的列“bar”在哪里?在

因此,如果是SQL,我要查找的结果如下: “按id1,id2从数据帧组中选择avg(foo),avg(bar);” (很抱歉,我更像一个sql人,对熊猫还不熟悉,但我现在需要它。)

我也尝试过:

groupedFrame = res.groupby(["id1","id2"])
aggrFrame = groupedFrame.aggregate(numpy.mean)

这给了我完全相同的结果,仍然缺少“bar”列。在

我阅读的网站:

我做错什么了?-谢谢你。在


Tags: 数据代码inpandasdffoobarnull
2条回答

有一个问题,您的列bar不是数字,所以聚合函数会忽略它。在

您可以检查省略列的^{}不是数字:

print (df['bar'].dtype)
object

您可以检查automatic exclusion of nuisance columns。在

解决方案是在将string值聚合为numeric之前,如果不可能,请使用^{}和参数errors='coerce'添加{}:

^{pr2}$

但如果有混合数据-数字与strings是可能的,请使用^{}

df['bar'] = df['bar'].replace("NULL", np.nan)

如前所述,您应该在取平均值之前替换空值

df.replace("NULL",-1).groupby(["id1","id2"])["foo","bar"].mean()

输出

^{pr2}$

相关问题 更多 >