Сумма столбцов на основе диапазона значений других столбцов в кадре данных Pandas - PullRequest
1 голос
/ 02 августа 2020

Это мой фрейм данных:

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_1, vol_2 и vol_3 для каждой строки, если цена, указанная в следующем столбце для каждый объем находится в диапазоне min и max столбцов. Например, для первой строки я хочу vol_2 и vol_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

1 Ответ

6 голосов
/ 02 августа 2020

Измените форму данных, чтобы у вас были отдельные столбцы для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...