Pandas groupby计数唯一非累积

juzqafwq  于 2023-11-15  发布在  其他
关注(0)|答案(2)|浏览(119)

我有一个玩具数据集

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


我已经尝试了这个answer和这个answer的代码,但没有产生上面的(或类似的结果)

ttygqcqt

ttygqcqt1#

有很多方法可以做到这一点,其中一种方法是为您的数据集:

df.drop_duplicates(subset='user', keep='last').groupby('candies').count()

字符串
输出量:

user
candies      
1           1
3           2
4           1

u4vypkhs

u4vypkhs2#

看起来像一个双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

相关问题