我有以下数据框:
dataframe = pd.DataFrame({'date':pd.to_datetime(['2018-05-27', '2018-05-27','2018-05-28','2018-06-1']),
'code': ['1', '1', '1', '2']})
dataframe
date code
0 2018-05-27 1
1 2018-05-27 1
2 2018-05-28 1
3 2018-06-01 2
我想要
dataframe = pd.DataFrame({'date':pd.to_datetime(['2018-05-27', '2018-05-28','2018-05-29','2018-05-30','2018-05-31', '2018-06-1']),
'1': [2, 1, 1, 0, 0, 0],
'2': [0, 0, 0, 0, 0, 1]})
dataframe
date 1 2
0 2018-05-27 2 0
1 2018-05-28 1 0
2 2018-05-29 0 0
3 2018-05-30 0 0
4 2018-05-31 0 0
5 2018-06-01 0 1
我的第一次尝试是:
dataframe.groupby([dataframe['code'], dataframe['date'].dt.month.rename('month'), dataframe['date'].dt.day.rename('day')]).agg({"count"})
code month day date count
1 5 27 2
28 1
2 6 1 1
但是给我两个问题:(1)日期不再是日期格式,(2)我不知道如何转置日期。我一直在与熊猫的时间序列和聚合函数作斗争,但收效甚微。我也只想几个月就可以拥有它。对如何进行有任何想法吗?
答案 0 :(得分:3)
您可以使用pd.crosstab
:
pd.crosstab(dataframe['date'], dataframe['code'])\
.reindex(pd.date_range(dataframe['date'].min(),
dataframe['date'].max()), fill_value=0)
输出:
code 1 2
2018-05-27 2 0
2018-05-28 1 0
2018-05-29 0 0
2018-05-30 0 0
2018-05-31 0 0
2018-06-01 0 1
选项#2
dataframe.groupby(['date','code']).size()\
.unstack(1, fill_value=0)\
.reindex(pd.date_range(dataframe['date'].min(),
dataframe['date'].max()),
fill_value=0)
输出:
code 1 2
2018-05-27 2 0
2018-05-28 1 0
2018-05-29 0 0
2018-05-30 0 0
2018-05-31 0 0
2018-06-01 0 1