gpt4 book ai didi

python - Pandas 分组并做总结

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:17 25 4
gpt4 key购买 nike

我有一个包含两列 ID 和标签的数据框。标签只能是 0 或 1。

下面的代码生成这样一个数据框

data = [[10105, 1], [10105, 1], [10105, 0], [20205, 0], [20205, 0], [20205, 1], [20205, 1]] 

test=pd.DataFrame(data,columns=["ID","label"])

test
ID label
0 10105 1
1 10105 1
2 10105 0
3 20205 0
4 20205 0
5 20205 1
6 20205 1

一旦数据按 ID 分组,我想获得有关标签的一些统计信息。

test.groupby('ID')

将按 ID 对条目进行分组,但我想查看有多少 ID 为 10105 的条目的标签为 1,有多少条目的标签为 0。我还想计算 0 的百分比。那将是理想的输出

ID 10105, label1: 2, label0: 1, Percantage (label0/(label1+label0)): 1/3
ID 20205, label1: 2, label0: 2, Percantage (label0/(label1+label0)): 2/4

我认为 python 有一种聚合结果的方法,但同时我需要一种方法来在特定 ID 的标签之间进行计算。

你能帮帮我吗?

非常感谢您的回复。

问候亚历克斯

最佳答案

您可以使用 GroupBy.agg带有聚合函数的新列名的元组 - 对于 label0Percantage0 比较值并按 sum 计数, mean 表示百分比。它有效,因为 True 的处理方式类似于 1

df = test.groupby('ID')['label'].agg([('label1','sum'),
('label0',lambda x: x.eq(0).sum()),
('Percantage',lambda x: x.eq(0).mean())])
print (df)
label1 label0 Percantage
ID
10105 2 1 0.333333
20205 2 2 0.500000

如果使用 pandas 0.25+:

def label0(x):
return x.eq(0).sum()

def Percantage(x):
return x.eq(0).mean()


df = test.groupby('ID').agg(label1=pd.NamedAgg(column='label', aggfunc='sum'),
label0=pd.NamedAgg(column='label', aggfunc=label0),
Percantage=pd.NamedAgg(column='label', aggfunc=Percantage))

索引中的最后一个如果需要的列:

df = df.reset_index()
print (df)

ID label1 label0 Percantage
0 10105 2 1 0.333333
1 20205 2 2 0.500000

关于python - Pandas 分组并做总结,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57669146/

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