熊猫通过多列分组,计数和重新采样

时间:2018-10-22 21:02:37

标签: python pandas pandas-groupby

具有以下数据框:

                     UserID TweetLanguage
2014-08-25 21:00:00  001        english
2014-08-27 21:04:00  001        arabic
2014-08-29 22:07:00  001        espanish
2014-08-25 22:09:00  002        english
2014-08-26 22:09:00  002        espanish
2014-08-25 22:09:00  003        english 

我需要绘制以多种语言发布的每周用户数。

例如,在上述数据框中,用户001和002用多种语言发布了推文。因此,在该图中,本周的对应值应为2。其他周的情况相同。

3 个答案:

答案 0 :(得分:3)

df.groupby([pd.Grouper(freq='W'), 'User ID'])['TweetLanguage'].nunique().unstack().plot()

答案 1 :(得分:2)

df.groupby(pd.Grouper(key='datetime', freq='W')).apply(lambda df:\
df.groupby('UserID').apply(lambda df: len(df.TweetLanguage.value_counts())))

这是一支可以分开一周并在一周内获得语言数量的班轮

df.groupby('UserID').apply(lambda df: len(df.TweetLanguage.value_counts()))

这将返回一个序列,其索引为:用户ID的值:每周使用的语言数。

答案 2 :(得分:2)

使用2 groupbys。第一个查找每周使用多种语言发布的用户,第二个查找每周有多少种语言。

(df.groupby([df.index.year.rename('year'), df.index.week.rename('week'), 'UserID']).TweetLanguage.nunique() > 1).groupby(level=[0,1]).sum()

#year  week
#2014  35      2.0
#Name: TweetLanguage, dtype: float64