具有以下数据框:
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。其他周的情况相同。
答案 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