我想按组统计滚动式唯一分类:
Group Item
A pen
A pen
A elbow
A warthog
B elbow
B peach
应导致:
Group Item Unique_item_count
A pen 1
A pen 1
A elbow 2
A warthog 3
B elbow 1
B peach 2
我觉得pd.rolling_count可能有答案,但是我还没有弄清楚。感谢您的智慧和巫术!
答案 0 :(得分:3)
我们可以两次GroupBy
。首先,我们获得nunique
的值,第二次我们获得cumsum
以使Item
中每个唯一值的计数增加:
然后,我们merge
将这些结果返回到原始数据框。
s = df.groupby(['Group', 'Item'], sort=False)['Item'].nunique().groupby(level=0).cumsum()
final = df.merge(s.reset_index(name='Unique_item_count'), on=['Group', 'Item'])
输出
Group Item Unique_item_count
0 A pen 1
1 A pen 1
2 A elbow 2
3 A warthog 3
4 B elbow 1
5 B peach 2
答案 1 :(得分:0)
方法与Erfan建议的相同。只是不必做merge
df.groupby(['Group', 'Item'], sort=False)['Item'].nunique().groupby(level=0).cumsum().reindex(df).reset_index(name='Unique_count')
输出
Group Item Unique_count
0 A pen 1
1 A pen 1
2 A elbow 2
3 A warthog 3
4 B elbow 1
5 B peach 2