You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python:按日期统计DataFrame中id列的重复条目数量

嘿,我来帮你搞定这个按日期统计每个id重复次数的问题!

首先,咱们先明确需求:要对DataFrame按日期分组,然后统计每个id在对应日期里的出现次数——就像你说的,每个日期里id=1都出现两次,而id=2可能只出现一次对吧?

问题分析

你之前的代码之所以会让id=2的结果全是1,大概率是分组逻辑不对:比如你可能只按日期单字段分组,然后用了count()或者nunique()这类不匹配的统计方法。count()会统计当天所有非空记录数,nunique()是统计当天有多少个不同的id,都不是咱们要的“每个id在当天的重复次数”。

正确解决方案

我给你两种常用的实现方式,按需选就行:

方式1:生成单独的统计结果表

先按日期+id双字段分组,计算每组的大小,就能直接得到每个日期每个id的重复次数:

import pandas as pd

# 先模拟你的DataFrame(可以替换成你实际的df)
df = pd.DataFrame({
    '日期': ['2024-01-01', '2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02'],
    'id': [1, 1, 2, 1, 1]
})

# 核心代码:分组统计
result = df.groupby(['日期', 'id']).size().reset_index(name='重复次数')

运行后得到的result就是:

日期id重复次数
2024-01-0112
2024-01-0121
2024-01-0212

如果想要把id作为列展示(更贴近常见的报表格式),可以用unstack调整结构:

result_pivot = result.set_index(['日期', 'id'])['重复次数'].unstack(fill_value=0)

这样结果会变成:

日期12
2024-01-0121
2024-01-0220

方式2:在原DataFrame中添加统计列

如果想在原数据的每一行直接显示对应日期+id的重复次数,用transform方法更方便:

df['当日重复次数'] = df.groupby(['日期', 'id'])['id'].transform('size')

处理后的原df会变成:

日期id当日重复次数
2024-01-0112
2024-01-0112
2024-01-0121
2024-01-0212
2024-01-0212

这样不管是id=1还是id=2,都能正确显示它们在对应日期的重复次数啦!

内容的提问来源于stack exchange,提问作者freddy888

火山引擎 最新活动