Pandas - 滚动累计不同值的计数

3

我有一个如下的数据框:

df = pd.DataFrame({
         'date': ['01/01/2020', '01/01/2020', '01/01/2020', '02/01/2020', '02/01/2020', '03/01/2020', '03/01/2020'],
         'id': [101, 102, 103, 101, 104, 105, 106]
})

输出:

         date   id
0  01/01/2020  101
1  01/01/2020  102
2  01/01/2020  103
3  02/01/2020  101
4  02/01/2020  104
5  03/01/2020  105
6  03/01/2020  106

我需要累计不同值的数量,如下所示:

        date   id
0  01/01/2020  3
1  02/01/2020  4
2  03/01/2020  6

我尝试过像 df.groupby(['date']).nunique() 这样的方法,但显然不正确,因为它给出了每个日期的唯一计数,而我需要的是滚动的唯一计数。

2个回答

4

我认为首先需要通过DataFrame.drop_duplicatesid删除重复项,然后通过GroupBy.size获取各个date的计数,并使用Series.cumsum添加累积和:

df = df.drop_duplicates('id').groupby('date').size().cumsum().reset_index(name='id')
print (df)
         date  id
0  01/01/2020   3
1  02/01/2020   4
2  03/01/2020   6

1
太好了,非常感谢!我没有考虑先删除重复项。 - dataplankton

3

或者我们可以使用 DataFrame.duplicated

(~df.duplicated('id')).groupby(df['date']).sum().cumsum().rename('id').reset_index()

         date   id
0  01/01/2020  3.0
1  02/01/2020  4.0
2  03/01/2020  6.0

1
感谢您提供了另一种解决方案。 - dataplankton

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