基于 Pandas 数据框中其他列的值范围的列总和

Ami*_*mir 1 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]})
Run Code Online (Sandbox Code Playgroud)

我想增加一列,资金vol_1vol_2以及vol_3为每一行,如果这是在每个卷下一列价格在范围minmaxCOLS。例如对于我想要的第一行vol_2vol_3因为价格在min和 的范围内max。我想要的结果是这样的:

 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
Run Code Online (Sandbox Code Playgroud)

sam*_*mmy 7

重塑数据让你有单独的列volpriceminmax。接下来,仅筛选price之间的行,按列分组并将结果附加到。minmaxsymdf

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
Run Code Online (Sandbox Code Playgroud)