如何在Pandas DataFrame中新增列以统计每日记录条数?
解决方法:为DataFrame添加每日记录数字段
嗨,我来帮你搞定这个问题~你遇到的NaN问题,是因为直接把groupby后的结果赋值回原DataFrame时,索引不匹配导致的。让我一步步给你讲清楚怎么改:
为什么你的代码会返回NaN?
你写的df.groupby('date').count()会生成一个以date为索引的新DataFrame,它的结构是这样的:
| date | ID |
|---|---|
| 2022-03-14 | 3 |
| 2022-03-15 | 1 |
| 2022-03-16 | 2 |
而你的原df的索引是默认的数字0-5,两者的索引完全不匹配,所以直接赋值时,原df的每一行都找不到对应的值,就会填充NaN。
正确的实现方式
我们需要用transform方法,它会把聚合后的结果广播回原DataFrame的每一行,保持索引一致,完美匹配你的需求。
方法1:使用count()(指定列)
df['daily_records'] = df.groupby('date')['ID'].transform('count')
这里指定ID列是因为count()会统计该列非空值的数量,如果你其他列没有缺失值,也可以用其他列代替。
方法2:使用size()(更直接)
如果你只是想统计每组的总记录数(不管有没有缺失值),用size()更合适,它不需要指定列:
df['daily_records'] = df.groupby('date').transform('size')
运行后的结果
执行上面任意一段代码后,你的df就会变成期望的样子:
| ID | date | daily_records |
|---|---|---|
| 124 | 2022-03-14 | 3 |
| 34 | 2022-03-14 | 3 |
| 66 | 2022-03-14 | 3 |
| 2 | 2022-03-15 | 1 |
| 91 | 2022-03-16 | 2 |
| 20 | 2022-03-16 | 2 |
内容的提问来源于stack exchange,提问作者dom_2108




