как выполнить деление на динамические столбцы в пандах - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть следующие столбцы в пандах

code    nozzle_1_cumsum   nozzle_2_cumsum    nozzle_sale_cumsum
123     10                10                 20
123     20                10                 10
123     10                10                 10

В приведенном выше фрейме данных nozzle_1_cumsum & nozzle_2_cumsum - это динамические столбцы, это может быть nozzle_1_cumsum, nozzle_2_cumsum, nozzle_3_cumsum etc, а nozzle_sale_cumsum - статический столбец.Я хочу создать 2 новых столбца в виде соотношений (nozzle_1_cumsum \ nozzle_sale_cumsum & nozzle_2_cumsum \ nozzle_sale_cumsum)

code    nozzle_1_cumsum   nozzle_2_cumsum    nozzle_sale_cumsum  nozzle_1_perc  nozzle_2_perc 
123     10                10                 20                  0.5            0.5
123     20                10                 10                  2              1
123     10                10                 10                  1              1

Как я могу это сделать в пандах?

Ответы [ 3 ]

1 голос
/ 20 сентября 2019

Попробуйте добавить axis к div:

(df.filter(regex='nozzle_[\d+]_cumsum')
   .div(df['nozzle_sale_cumsum'], axis='rows')
   .rename(columns=lambda x: x.replace('_cumsum','_perc'))
)

Вывод:

     nozzle_1_perc    nozzle_2_perc
0              0.5              0.5
1              2.0              1.0
2              1.0              1.0

И если вы хотите добавить эти столбцы:

df.merge(the_above_code)
1 голос
/ 20 сентября 2019

вы можете создать список столбцов, для которых вы хотите выполнить это действие, а затем просмотреть их, создавая новые столбцы в каждом цикле

import re
cols = [cols for cols in df.columns if re.search('nozzle_\d+_cumsum',cols)]

for c in cols:
   df[c.replace('cumsum','perc')] = df[c]/df['nozzle_sale_cumsum']

output:

   nozzle_1_cumsum  nozzle_2_cumsum  nozzle_sale_cumsum  nozzle_1_perc  nozzle_2_perc
0               10               10                  20            0.5            0.5
1               20               10                  10            2.0            1.0
2               10               10                  10            1.0            1.0
0 голосов
/ 20 сентября 2019
import pandas as pd

data = pd.read_csv('your csv file.csv')
data['nozzle_1_perc']=''
data['nozzle_2_perc']=''
for i in range(0,len(data)):
    data['nozzle_1_perc'][i] = data['nozzle_1_cumsum'][i]/data['nozzle_sale_cumsum'][i]
    data['nozzle_1_perc'][i] = data['nozzle_2_cumsum'][i]/data['nozzle_sale_cumsum'][i]
data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...