groupby结果数据帧级联

时间:2018-08-09 11:51:03

标签: python pandas dataframe

我有一个像这样的数据集:

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)

2 个答案:

答案 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