如何在DataFrame中统计各分组0值出现次数并生成对应元组列表
解法代码
你可以通过pandas的分组聚合功能快速实现需求,核心逻辑是先过滤出Id_2为0的记录,再按Id_1分组计数,最后转换为元组列表即可:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'Id_1': [1401,1401,1801,1801,1801,1801,2001,2001,2201,2201], 'Id_2': [1,1,0,0,0,0,1,1,0,0] }) # 核心逻辑 res = df[df['Id_2'] == 0].groupby('Id_1').size().reset_index(name='count') L = list(res.itertuples(index=False, name=None)) print(L) # 输出:[(1801, 4), (2201, 2)]
逻辑说明
- 第一步:
df[df['Id_2'] == 0]筛选出所有Id_2为0的记录,天然过滤掉没有0值的分组 - 第二步:
groupby('Id_1').size()按Id_1分组,统计每个分组的记录数,也就是0值出现次数 - 第三步:
itertuples(index=False, name=None)将统计结果的每一行转为无索引的元组,最后转换为列表即可得到预期结果
如果需要保留所有Id_1分组(包括0值出现次数为0的分组),可以把核心逻辑替换为:
res = df.groupby('Id_1')['Id_2'].agg(lambda x: (x == 0).sum()).reset_index(name='count') L = list(res.itertuples(index=False, name=None))此时输出会包含(1401,0)、(2001,0)两个额外元组。
内容的提问来源于stack exchange,提问作者AdrixnIPP
相关产品推荐
相关产品推荐

