gpt4 book ai didi

python - 对数据框进行分组并计算未显示的列的项目数量

转载 作者:行者123 更新时间:2023-12-01 02:51:45 25 4
gpt4 key购买 nike

好吧,我承认,我很难真正为此制定一个好的标题。所以我会尝试举一个例子。

这是我的示例数据框:

df = pd.DataFrame([
(1,"a","good"),
(1,"a","good"),
(1,"b","good"),
(1,"c","bad"),
(2,"a","good"),
(2,"b","bad"),
(3,"a","none")], columns=["id", "type", "eval"])

我用它做的事情如下:

df.groupby(["id", "type"])["id"].agg({'id':'count'})

这会导致:

        id
id type
1 a 2
b 1
c 1
2 a 1
b 1
3 a 1

这很好,尽管我稍后需要的是例如该 id 将在每一行中重复。但这还不是最重要的部分。

我现在需要的是这样的:

        id good bad none
id type
1 a 2 2 0 0
b 1 1 0 0
c 1 0 1 0
2 a 1 1 0 0
b 1 0 1 0
3 a 1 0 0 1

这样的结果会更好,因为我需要将其返回到填充了所有字段的数据框(最后是 Excel 工作表)中。事实上,我分组的列还会有更多。它们也必须完全填充。

        id good bad none
id type
1 a 2 2 0 0
1 b 1 1 0 0
1 c 1 0 1 0
2 a 1 1 0 0
2 b 1 0 1 0
3 a 1 0 0 1

谢谢你帮助我。

最佳答案

您可以使用groupby + size (添加了最后一列)或 value_countsunstack :

df1 = df.groupby(["id", "type", 'eval'])
.size()
.unstack(fill_value=0)
.rename_axis(None, axis=1)
print (df1)
bad good none
id type
1 a 0 2 0
b 0 1 0
c 1 0 0
2 a 0 1 0
b 1 0 0
3 a 0 0 1
<小时/>
df1 = df.groupby(["id", "type"])[ 'eval']
.value_counts()
.unstack(fill_value=0)
.rename_axis(None, axis=1)
print (df1)
bad good none
id type
1 a 0 2 0
b 0 1 0
c 1 0 0
2 a 0 1 0
b 1 0 0
3 a 0 0 1

但是对于写入 Excel 来说:

df1.to_excel('file.xlsx')

pic

所以需要reset_index最后。

df1.reset_index().to_excel('file.xlsx', index=False)

pic1

编辑:

我忘记了id列,但它是重复的列名,所以需要id1:

df1.insert(0, 'id1', df1.sum(axis=1))

关于python - 对数据框进行分组并计算未显示的列的项目数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44686288/

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