提问人:josepmaria 提问时间:11/14/2023 最后编辑:josepmaria 更新时间:11/14/2023 访问量:61
Pandas groupby count 唯一非累积
Pandas groupby count unique non cumulative
问:
我有这个玩具数据集
df=pd.DataFrame({'user':['John','Steve','Steve','Steve','Jane','Jane','Jane','Jane','Alice','Alice','Alice'],
'days':[1,1,2,3,1,2,3,4,1,2,3]})
屈服
user days
John 1
Steve 1
Steve 2
Steve 3
Jane 1
Jane 2
Jane 3
Jane 4
Alice 1
Alice 2
Alice 3
我希望仅计算 1 天、仅 2 天和仅 3 天的确切用户数量。
所需输出
user days_count
1 1
3 2
4 1
答:
2赞
mozway
11/14/2023
#1
看起来像一个双value_counts
:
df['user'].value_counts(sort=False).value_counts(sort=False)
输出:
count
1 1
3 2
4 1
Name: count, dtype: int64
对于确切的格式:
out = (df['user'].value_counts(sort=False)
.value_counts(sort=False)
.rename_axis('user')
.reset_index(name='days_count')
)
或:
from collections import Counter
c = Counter(Counter(df['user']).values())
out = pd.DataFrame({'user': c.keys(), 'day_count': c.values()})
输出:
user days_count
0 1 1
1 3 2
2 4 1
2赞
Suraj Shourie
11/14/2023
#2
有很多方法可以做到这一点,数据集的一种方法是:
df.drop_duplicates(subset='user', keep='last').groupby('candies').count()
输出:
user
candies
1 1
3 2
4 1
评论
1
2
1