我有一个带有两列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
答案 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()