在groupby之后更改标头中重复名称的pandas DataFrame列名称

时间:2018-10-12 09:13:22

标签: python pandas

我有一个带有两列TimeStamp(日期类型)和Value的数据框。我想按年和小时汇总,值是平均值。

df.groupby([df["TimeStamp"].dt.year,df["TimeStamp"].dt.hour]).mean()

结果是:

                       Value
TimeStamp   TimeStamp
2014        0          4643.733325
            1          4278.877103
...

我想平整标题并将列重命名为Year,hour,Value。但是我不能使用.reset_index(),因为名称TimeStamp是重复的。 我尝试使用

df.groupby([df["TimeStamp"].dt.year,df["TimeStamp"].dt.hour],as_index=False).mean().reset_index()

但是TimeStamp列丢失了所有值

        index      Value
0       0          4643.733325
1       1          4278.877103
...

我怎么有

Year   Hour   Value
2014   1      4643.7
       2      4278.8

2 个答案:

答案 0 :(得分:3)

使用count(*)

rename

或通过rename_axis设置MultiIndex名称:

rng = pd.to_datetime(['2014-04-03', '2014-04-03 01:01:00', '2014-05-03'])
df = pd.DataFrame({'TimeStamp': rng, 'value': range(3)})  
print (df)
            TimeStamp  value
0 2014-04-03 00:00:00      0
1 2014-04-03 01:01:00      1
2 2014-05-03 00:00:00      2

s = df.groupby([df["TimeStamp"].dt.year.rename('Year'),
                df["TimeStamp"].dt.hour.rename('Hour')]).mean()
print (s)
           value
Year Hour       
2014 0         1
     1         1

答案 1 :(得分:1)

我认为您可以这样做:

df.groupby([df["TimeStamp"].dt.year,
        df.rename(columns={"TimeStamp":"TimeStamp_1"})["TimeStamp_1"].dt.hour]).mean()