如何基于DataFrame计算每日High-Low差值生成新DataFrame
计算DataFrame每日High与Low的差值生成Volume列
不需要额外做连接操作,用透视或者分组转置的方法就能快速实现,下面是两种实用方案:
方法一:使用pivot透视表
将原数据按Date作为索引,Metric转为列,这样同一日期的High和Low会处于同一行,直接相减即可得到Volume:
import pandas as pd # 假设你的原始DataFrame名为df # 第一步:透视数据,把Metric转成列 pivot_df = df.pivot(index='Date', columns='Metric', values='Value') # 第二步:计算High-Low得到Volume,只保留需要的列 volume_df = pivot_df.assign(Volume=pivot_df['High'] - pivot_df['Low'])[['Volume']].reset_index() # 可选:将Volume格式化为两位小数 volume_df['Volume'] = volume_df['Volume'].round(2)
方法二:使用groupby+unstack
通过分组后转置,同样能实现同一日期的Metric值对齐,再计算差值:
import pandas as pd # 按日期和指标分组,转置后让同一日期的指标成为列 grouped_df = df.groupby(['Date', 'Metric'])['Value'].first().unstack() # 逐行计算High-Low,生成新的Volume列 volume_df = grouped_df.apply(lambda row: row['High'] - row['Low'], axis=1).reset_index(name='Volume') # 可选:格式化小数位数 volume_df['Volume'] = volume_df['Volume'].round(2)
最终得到的volume_df结构如下:
Date Volume
2020-01-01 2.00
2020-01-02 6.45
内容的提问来源于stack exchange,提问作者pinecone6969
相关产品推荐
相关产品推荐

