gpt4 book ai didi

python - Pandas 聚合数据框只返回一列

转载 作者:行者123 更新时间:2023-11-28 22:26:44 27 4
gpt4 key购买 nike

你好。

我有一个像这样的 pandas DataFrame (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 的平均值。

我的代码:

res = df.groupby(["id1","id2"])["foo","bar"].mean()

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

            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 人,并且是 pandas 的新手,但我现在需要它。)

我也尝试过:

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

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

我阅读的网站:

我做错了什么? - 在此先致谢。

最佳答案

问题是您的 bar 列不是数字,因此聚合函数忽略了它。

可以查看dtype省略的列 - 不是数字:

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

可以查看automatic exclusion of nuisance columns .

解决方案是在聚合之前将 string 值转换为 numeric,如果不可能,添加 NaNto_numeric和参数 errors='coerce':

df['bar'] = pd.to_numeric(df['bar'], errors='coerce')
res = df.groupby(["id1","id2"])["foo","bar"].mean()
print (res)
foo bar
id1 id2
1 1 5.75 3.0
2 5.50 2.0
3 7.00 3.0

但如果有混合数据 - 带有 strings 的数字可以使用 replace :

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

关于python - Pandas 聚合数据框只返回一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44567180/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com