2016-05-30 4 views
1

У меня есть некоторые данные щебетИспользование AGG, чтобы найти наиболее частый пользователь в день

username time 
RamiAlLolah 2016-03-11 
grezz10  2016-02-19 
DawlaWitness11 2016-04-08 
murasil1 2016-04-29 
mustaklash 2016-02-19 

Я хотел бы быть в состоянии определить, кто был наиболее частым твитер на каждый день. Я могу сгруппировать DataFrame по дням, а затем использовать df.username.value_counts().reset_index().ix[0,0], чтобы получить наиболее частой твитер в этот день.

Могу ли я сделать это для всего кадра данных, используя agg? Чтобы найти самый частой твитер для каждого дня, могу ли я сделать что-то вроде r.agg(lambda x: x.username.value_counts().reset_index().ix[0,0])? Или есть лучший способ сделать то, что я хочу?

ответ

0

Я думаю, что вы можете использовать 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 
0

Другим решением является принять режим каждый раз и concat решения

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^