我在熊猫中有以下数据框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_flag123 1 1 1234 12 23.23 short123 1 2 1234 23 32.45 ok123 2 1 1200 13 33.13 excess123 2 2 1200 53 22.45 ok我正在关注熊猫。first I am getting all dynamic columns in different arrayscols_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 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
您可以使用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])
a.pivot_table(
values='value',
index=['code', 'tank', 'noz_sale_cumsum', 'noz_no'],
columns=['kpi'], aggfunc='first'
).reset_index()
添加回答
举报
0/150
提交
取消