在 Pandas 数据框中统计相同日期数量

4
我有一个带有日期列的数据框,我想创建一个新列,告诉我数据集包含多少相同的日期。这是原始数据集的最小示例:
df1:
date         
2017/01/03     
2017/01/03     
2017/01/04     
2017/01/04     
2017/01/04     
2017/01/05     

我想创建这个date_count,所以目标数据集是:
df1:
date         date_count
2017/01/03     2
2017/01/03     2
2017/01/04     3
2017/01/04     3
2017/01/04     3
2017/01/05     1

创建df1的实际代码:
dict1 = [{'date': '2017/01/03', 'date_count': 2},{'date': '2017/01/03',              'date_count': 2}, 
 {'date': '2017/01/04', 'date_count': 3},{'date': '2017/01/04',   'date_count': 3},
{'date': '2017/01/04', 'date_count': 3},{'date': '2017/01/05',    'date_count': 1}]
df = pd.DataFrame(dict1, index=['s1', 's2','s3','s1','s2','s3'])

1
你知道groupby吗? - rpanai
我现在可以做到。但这只会给我一个列出出现次数的输出,对吧? - Niccola Tartaglia
你可以使用 groupbypd.mergetransform 来完成这个编程任务。 - rpanai
1
然后执行 transform('count') - user3483203
1
我已在上方添加了原始df和目标df。 - Niccola Tartaglia
显示剩余3条评论
2个回答

6

以下是另一种使用 map 方法和 groupbysize 的方法:

>>> df
          date
s1  2017/01/03
s2  2017/01/03
s3  2017/01/04
s1  2017/01/04
s2  2017/01/04
s3  2017/01/05

df['date_count'] = df.date.map(df.groupby('date').size())

>>> df
          date  date_count
s1  2017/01/03           2
s2  2017/01/03           2
s3  2017/01/04           3
s1  2017/01/04           3
s2  2017/01/04           3
s3  2017/01/05           1

这个完美地运行了!谢谢。 - Niccola Tartaglia
这个操作比直接使用 transform 快还是慢?当传递一个空的 DataFrame 时,它肯定比 transform('size') 更安全,但 .transform('count') 似乎没有这个问题。 - ALollz
1
对我来说,523 µs ± 17.4 µs1.88 ms ± 39.4 µs 看起来更快。看看在处理更大的数据框时它的表现会如何也很有趣。 - rpanai
3
在小的数据框上,使用map方法会更快,但是在非常大的数据框上情况则不同。可能需要在大约50k行左右切换使用。基于我刚刚进行的更改,transform方法会更早地变得更快。 - user3483203
2
@user3483203 这正是我发现的。 - sacuL

3

使用 count 结合 transform

df['count'] = df.groupby('date')['date'].transform('count')

         date  count
0  2017/01/03      2
1  2017/01/03      2
2  2017/01/04      3
3  2017/01/04      3
4  2017/01/04      3
5  2017/01/05      1

我想知道为什么没有 .reset_index() 就不能正常工作。 - rpanai
1
因为只有一列,所以一旦进行groupby操作,它就没有任何内容可供计数,reset_index会给它一个列来聚合。 - user3483203
谢谢。我从未只使用一列的 df - rpanai
1
@user32185,我之前没有意识到你可以对分组的列进行索引,这大大加快了这种方法的速度。 - user3483203

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接