我的数据框如下:
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
答案 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