我有一些推特数据
username time
RamiAlLolah 2016-03-11
grezz10 2016-02-19
DawlaWitness11 2016-04-08
murasil1 2016-04-29
mustaklash 2016-02-19
我希望能够确定谁是每天最频繁的推文者。我可以根据天数对数据进行分组,然后使用df.username.value_counts().reset_index().ix[0,0]
获取当天最频繁的tweeter。
我可以使用agg
对整个数据帧执行此操作吗?为了找到每天最频繁的推文,我能做一些像r.agg( lambda x: x.username.value_counts().reset_index().ix[0,0])
这样的事情吗?还是有更好的方法来做我想做的事?
发布于 2016-05-30 17:58:01
我认为您可以使用groupby
通过dt.date
聚合mode
和最后一个reset_index
print (df.username.groupby(df.time.dt.date).apply(lambda x: x.mode()))
示例:
import pandas as pd
df = pd.DataFrame({'time': {0: pd.Timestamp('2016-03-11 00:00:00'), 1: pd.Timestamp('2016-02-19 00:00:00'), 2: pd.Timestamp('2016-02-19 00:00:00'), 3: pd.Timestamp('2016-02-19 00:00:00'), 4: pd.Timestamp('2016-04-08 00:00:00'), 5: pd.Timestamp('2016-04-08 00:00:00'), 6: pd.Timestamp('2016-04-29 00:00:00'), 7: pd.Timestamp('2016-02-19 00:00:00')},
'username': {0: 'RamiAlLolah', 1: 'grezz10', 2: 'grezz10', 3: 'grezz10', 4: 'DawlaWitness11', 5: 'DawlaWitness11', 6: 'murasil1', 7: 'mustaklash'}},
columns = ['username','time'])
print (df)
username time
0 RamiAlLolah 2016-03-11
1 grezz10 2016-02-19
2 grezz10 2016-02-19
3 grezz10 2016-02-19
4 DawlaWitness11 2016-04-08
5 DawlaWitness11 2016-04-08
6 murasil1 2016-04-29
7 mustaklash 2016-02-19
print (df.username.groupby(df.time.dt.date)
.apply(lambda x: x.mode())
.reset_index(drop=True, level=1)
.reset_index())
time username
0 2016-02-19 grezz10
1 2016-04-08 DawlaWitness11
发布于 2016-05-30 20:35:43
另一种解决方案是采取每次的模式,并将解决方案连接起来。
r = pd.concat([df[df.time == i].mode() for i in df.time.unique()])
可选的索引,您可以这样做(因为您更喜欢您的结果)
r = r.reset_index(drop=True)
或
r.set_index('time', inplace = True)
https://stackoverflow.com/questions/37531059
复制相似问题