Python 按小时和分钟分组后创建新索引(或连接多索引的两个级别)
,您可以按日期时间而不是日期时间本身对日期进行分组:Python 按小时和分钟分组后创建新索引(或连接多索引的两个级别),python,pandas,datetime,pandas-groupby,multi-index,Python,Pandas,Datetime,Pandas Groupby,Multi Index,,您可以按日期时间而不是日期时间本身对日期进行分组: import pandas as pd import numpy as np dr = pd.date_range('01-01-2020', '01-03-2020', freq='30T') df = pd.DataFrame(np.random.rand(len(dr)), index=dr) df = df.groupby([df.index.hour, df.index.minute]).sum() 这将按预期聚合数据,但返回一
import pandas as pd
import numpy as np
dr = pd.date_range('01-01-2020', '01-03-2020', freq='30T')
df = pd.DataFrame(np.random.rand(len(dr)), index=dr)
df = df.groupby([df.index.hour, df.index.minute]).sum()
这将按预期聚合数据,但返回一个多索引数据帧,其中一个级别为未标记的小时,另一个级别为未标记的分钟:
0
0 0 1.383863
30 1.293589
1 0 0.545617
30 0.208717
2 0 0.464892
30 0.392486
...
我想创建一个新的索引,它将时间表示为字符串或实际的datetime.time()
。我可以将时间输入字符串,执行如下操作:
hours = df.index.get_level_values(0).astype(str).str.pad(2, fillchar='0')
minutes = df.index.get_level_values(1).astype(str).str.pad(2, fillchar='0')
new = hours + ':' + minutes
df = df.set_index(new, drop=True)
df.index.name = 'time'
输出:
0
time
00:00 1.203189
00:30 1.943932
01:00 1.671113
01:30 1.640122
02:00 1.240969
02:30 0.687489
...
这是可行的,但却是一组非常繁琐的命令。我的问题是:
datetime.time()
?我知道我可以将原始索引转换为df.index=df.index.time
,但我还没有找到一种方法,可以从一个索引级别获取小时,从另一个索引级别获取分钟,以获得时间
对象import pandas as pd
import numpy as np
dr = pd.date_range('01-01-2020', '01-03-2020', freq='30T')
df = pd.DataFrame(np.random.rand(len(dr)), index=dr)
df = df.groupby(df.index.strftime('%H:%M')).sum()
df.index.name = 'time'
或者要分组到datetime.time
,请将groupby
行替换为:
df = df.groupby(df.index.strftime(df.index.time)).sum()