我有一个像这样的数据集:
number day hour
12 20180101 10
7 20180101 10
8 20180101 11
78 20180101 12
我想按天,小时来获取一个新的数据框分组,其总和为数,因此结果如下所示:
time amount
2018010110 19
2018010111 8
2018010112 78
为此,我正在编写以下内容:
new_df['amount'] = df.groupby(['day','hour'])['number'].agg('sum')
我得到的结果是
但是,白天和小时似乎是数字的子键。如何转换new_df
使其仅包含所需的列?
如果我尝试访问new_df['day']
或new_df['amount']['day']
,则会收到错误消息,提示密钥不存在。
如果我可以访问它,我将运行类似
new_df['time'] = new_df.... .map(str) + new_df... .map(str)
答案 0 :(得分:4)
IIUC:
In [24]: df['day_hour'] = df['day'].astype(str)+df['hour'].astype(str)
In [27]: wd.groupby(['day_hour'],as_index=False)['number'].sum()
Out[27]:
day_hour number
0 2018010110 19
1 2018010111 8
2 2018010112 78
答案 1 :(得分:3)
您可以使用
In [160]: df.groupby(df.day * 100 + df.hour)['number'].sum()
Out[160]:
2018010110 19
2018010111 8
2018010112 78
Name: number, dtype: int64
In [164]: (df.groupby(df.day * 100 + df.hour)['number'].sum()
.rename_axis('time', 0).reset_index(name='amount'))
Out[164]:
time amount
0 2018010110 19
1 2018010111 8
2 2018010112 78