pandas groupby id并找到最大重复的工作日

时间:2014-09-06 05:11:21

标签: python pandas group-by

数据样本如下所示:

    id  week_day
0   48  Wednesday
1   48  Wednesday
2   51  Saturday
3   53  Friday
4   54  Tuesday
5   56  Thursday
6   57  Wednesday
7   57  Thursday
8   57  Thursday
9   58  Thursday
10  60  Monday
11  60  Monday
12  60  Tuesday
13  60  Wednesday
14  62  Monday
15  62  Wednesday
16  62  Thursday
17  62  Thursday
18  62  Saturday
19  62  Saturday

我想找到每个id的工作日重复最多次数(如果任何一周的随机冲突都可以考虑)。 所以我用了

function(df):
    return pd.Series({'frequent_weeday':df['booked_day'].max()}]
df.groupby('id').apply(function)

输出

    frequent_week_day
id  
48  2014-09-10
51  2014-09-06
53  2014-09-12
54  2014-09-09
56  2014-09-11
57  2014-09-10
58  2014-09-11
60  2014-09-10
62  2014-09-10
63  2014-09-09
64  2014-09-11

这是出乎意料的。

您能帮我找到数据集中每个ID最频繁的工作日吗?

+1,如果你已经弄清楚熊猫如何解释并显示"无用"值作为输出并且不会给出错误。

非常感谢您的任何见解!

1 个答案:

答案 0 :(得分:3)

我一直在度假一个月,大脑运作不正常。如果我理解你正确,你想要每个ID最常出现的工作日。鉴于以下数据:

import pandas as pd
data = {'id'           : [ 48, 48, 51, 53, 54, 56,  57,  57,  57,  58, 60, 60, 60, 60, 
                       62, 62, 62, 62, 62, 62],
        'booked_day' : [ 'Wednesday', 'Wednesday', 'Saturday', 'Friday', 'Tuesday', 
                     'Thursday', 'Wednesday', 'Thursday', 'Thursday', 'Thursday', 
                     'Monday', 'Monday', 'Tuesday', 'Wednesday', 'Monday', 
                     'Wednesday', 'Thursday', 'Thursday', 'Saturday', 'Saturday']}
DF = pd.DataFrame(data)

通过这样做,我得到了我认为你想要的解决方案:

DF.groupby('id').agg(lambda x : x.booked_day.value_counts().index[0])

   booked_day
id
48  Wednesday
51   Saturday
53     Friday
54    Tuesday
56   Thursday
57   Thursday
58   Thursday
60     Monday
62   Thursday