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

时间:2020-08-02 09:55:52

标签: 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]})

如果每个卷的下一列中的价格在{{的范围内, 1}}和vol_1列。 例如对于第一行,我想要vol_2vol_3,因为价格在minmax的范围内。 我想要的结果看起来像这样:

vol_2

1 个答案:

答案 0 :(得分:6)

Reshape数据,因此您具有volpriceminmax的各个列。接下来,filter仅用于priceminmax之间的行,按sym列分组并将结果附加到df。 / p>

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