Python Pandas groupby多次计算

时间:2017-04-21 15:51:39

标签: python pandas

我的数据框如下:

   id          email     domain          created_at   company
0  1   son@mail.com    old.com 2017-01-21 18:19:00  company_a
1  2   boy@mail.com    new.com 2017-01-22 01:19:00  company_b
2  3  girl@mail.com  nadda.com 2017-01-22 01:19:00  no_company

我需要按年,月汇总数据,以及公司的值是否与“no_company”不匹配:

期望的输出:

year        month       company      count                                  
2017        1           has_company    2
                        no_company     1

以下方法效果很好但是给了我公司专栏中每个值的计数;

new_df = test_df['created_at'].groupby([test_df.created_at.dt.year, test_df.created_at.dt.month, test_df.company]).agg('count')
print(new_df)

结果:

year        month       company                                       
2017        1           company_a      1
                        company_b      1
                        no_company     1

1 个答案:

答案 0 :(得分:4)

has_company / no_company映射一个新系列,然后groupby

c = df.company.map(lambda x: x if x == 'no_company' else 'has_company')
y = df.created_at.dt.year.rename('year')
m = df.created_at.dt.month.rename('month')

df.groupby([y, m, c]).size()

year  month  company    
2017  1      has_company    2
             no_company     1
dtype: int64