如何更改重采样列的名称?

How do I change the name of a resampled column?

我有一个包含纳斯达克股票指数每分钟价格波动的数据框。 在交易中,重要的是要考虑不同时间单位的数据(了解短期、中期和长期趋势...)

所以我使用了Pandas的resample()方法,在原来1分钟的基础上,又用了5分钟得到了一个带有价格的dataframe:

df1m = pd.DataFrame({
'Time' : ['2022-01-11 09:30:00', '2022-01-11 09:31:00', '2022-01-11 09:32:00', '2022-01-11 09:33:00', '2022-01-11 09:34:00', '2022-01-11 09:35:00', '2022-01-11 09:36:00' , '2022-01-11 09:37:00' , '2022-01-11 09:38:00' ,
       '2022-01-11 09:39:00', '2022-01-11 09:40:00'],  
'Price' : [1,2,3,4,5,6,7,8,9,10,11]})
df1m['Time'] = pd.to_datetime(df1m['Time'])
df1m.set_index(['Time'], inplace =True)

df5m = df1m.resample('5min').first() 

我将列名重命名为 5min :

df5m.rename(columns={'Price' : 'Price5'})

不幸的是,将两个数据帧(1 分钟和 5 分钟)放在一起时,不再考虑列名的更改:

df_1m_5m = pd.concat([df1m, df5m], axis=1)

如何明确重命名为 5 分钟数据创建的列,并避免为不同的数据使用两次相同的列名?

您可以使用:

df5m = df1m.resample('5min').first().add_suffix('5')
df_1m_5m = pd.concat([df1m, df5m], axis=1)

输出:

>>> df_1m_5m
                     Price  Price5
Time                              
2022-01-11 09:30:00      1     1.0
2022-01-11 09:31:00      2     NaN
2022-01-11 09:32:00      3     NaN
2022-01-11 09:33:00      4     NaN
2022-01-11 09:34:00      5     NaN
2022-01-11 09:35:00      6     6.0
2022-01-11 09:36:00      7     NaN
2022-01-11 09:37:00      8     NaN
2022-01-11 09:38:00      9     NaN
2022-01-11 09:39:00     10     NaN
2022-01-11 09:40:00     11    11.0

您忘记将结果重新分配给您的数据框:

df5m = df5m.rename(columns={'Price' : 'Price5'})

# OR

df5m.rename(columns={'Price' : 'Price5'}, inplace=True)

输出:

>>> df5m
                     Price5
Time                       
2022-01-11 09:30:00       1
2022-01-11 09:35:00       6
2022-01-11 09:40:00      11

相信您的问题是您在重命名中缺少选项 inplace=true。默认情况下它是 false,因此它会生成 DataFrame 的副本而不是编辑现有的 DataFrame。将其设置为 true 将编辑您现有的 DataFrame df5m

df5m.rename(columns={'Price' : 'Price5'},inplace=True)

df_1m_5m 的输出:

                     Price  Price5
Time
2022-01-11 09:30:00      1     1.0
2022-01-11 09:31:00      2     NaN
2022-01-11 09:32:00      3     NaN
2022-01-11 09:33:00      4     NaN
2022-01-11 09:34:00      5     NaN
2022-01-11 09:35:00      6     6.0
2022-01-11 09:36:00      7     NaN
2022-01-11 09:37:00      8     NaN
2022-01-11 09:38:00      9     NaN
2022-01-11 09:39:00     10     NaN
2022-01-11 09:40:00     11    11.0

同意 Stephan 和 Corralien 的观点。你也可以试试这个:

df1m['Price5'] = df1m.resample('5T').first()