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