Python 基于数据帧中其他列的值范围的列总和
这是我的数据帧:Python 基于数据帧中其他列的值范围的列总和,python,pandas,Python,Pandas,这是我的数据帧: df = pd.DataFrame({'sym': ['a', 'b'], 'vol_1': [100, 50], 'price_1': [5, 150], 'vol_2': [1500, 2000], 'price_2': [20, 175], 'vol_3': [123, 500], 'price_3': [22, 1000], 'min': [18, 150], 'max': [23, 176]}) 如果下一列中每个vol的价格在最
df = pd.DataFrame({'sym': ['a', 'b'], 'vol_1': [100, 50], 'price_1': [5, 150], 'vol_2': [1500, 2000], 'price_2': [20, 175],
'vol_3': [123, 500], 'price_3': [22, 1000], 'min': [18, 150], 'max': [23, 176]})
如果下一列中每个vol的价格在最小和最大cols范围内,我想添加一列,对每一行的vol_1、vol_2和vol_3求和。
例如,对于第一行,我想要volu_2和vol_3,因为价格在最小值和最大值之间。
我期望的结果如下所示:
sym vol_1 price_1 vol_2 price_2 vol_3 price_3 min max vol_sum
0 a 100 5 1500 20 123 22 18 23 1623
1 b 50 150 2000 175 500 1000 150 176 2050
将数据分组,以便您有vol、price、min和max的单独列。接下来,仅对于price介于min和max之间的行,按sym列分组,并将结果附加到df
将数据分组,以便您有vol、price、min和max的单独列。接下来,仅对于price介于min和max之间的行,按sym列分组,并将结果附加到df
df["vol_sum"] = (pd.wide_to_long(df,
stubnames=["vol", "price"],
i=["sym", "min", "max"],
j="number",
sep="_")
.query("min <= price <= max", engine="python")
.groupby("sym")
.vol
.sum()
.array
)
sym vol_1 price_1 vol_2 price_2 vol_3 price_3 min max vol_sum
0 a 100 5 1500 20 123 22 18 23 1623
1 b 50 150 2000 175 500 1000 150 176 2050