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

У меня есть следующий фрейм данных в пандах

code   tank  noz_sale_cumsum  noz_1_sub  noz_2_sub   noz_1_avg   noz_2_avg  noz_1_flag  noz_2_flag 
123    1     1234             12         23          23.23       32.45      short       ok                
123    2     1200             13         53          33.13       22.45      excess      ok            

столбцы, такие как noz_1_sub, noz_2_sub, noz_1_avg, noz_2_avg, noz_1_flag and noz_2_flag, генерируются динамически.Мой желаемый датафрейм будет следующим.

code  tank  noz_no   noz_sale_cumsum  noz_sub   noz_avg   noz_flag
123   1     1        1234             12        23.23     short
123   1     2        1234             23        32.45     ok
123   2     1        1200             13        33.13     excess
123   2     2        1200             53        22.45     ok

Я делаю следующее в пандах.

first I am getting all dynamic columns in different arrays

cols_sub = [cols for cols in df.columns if re.search('noz_\d+_sub', cols)]
cols_avg = [cols for cols in df.columns if re.search('noz_\d+_avg', cols)]
cols_flag = [cols for cols in df.columns if re.search('noz_\d+_flag', cols)]

final_df = df.pivot_table(index=['code', 'tank', 'noz_sale_cumsum'], columns=[cols_sub, cols_avg, cols_flag], values=[]).reset_index()      

Я не уверен насчет столбца значений и как извлечь число из столбцов типа noz и поместить его в столбец noz_no.Любая помощь приветствуется.

1 Ответ

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

Вы можете использовать melt, чтобы преобразовать все в строки, затем используйте pivot_table, чтобы преобразовать некоторые строки в столбцы.

a = df.melt(id_vars=['code', 'tank', 'noz_sale_cumsum'])
a['noz_no'] = a.variable.map(lambda x: x.split('_')[1])
a['kpi'] = a.variable.map(lambda x: 'noz_' + x.split('_')[2])

enter image description here

a.pivot_table(
    values='value',
    index=['code', 'tank', 'noz_sale_cumsum', 'noz_no'],
    columns=['kpi'], aggfunc='first'
).reset_index()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...