为了账号安全,请及时绑定邮箱和手机立即绑定

如何将熊猫列动态转换为行

如何将熊猫列动态转换为行

慕姐8265434 2022-06-02 17:53:27
我在熊猫中有以下数据框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])

//img1.sycdn.imooc.com//629888b30001278c09320229.jpg

a.pivot_table(

    values='value',

    index=['code', 'tank', 'noz_sale_cumsum', 'noz_no'],

    columns=['kpi'], aggfunc='first'

).reset_index()

//img1.sycdn.imooc.com//629888be0001b69710300239.jpg

查看完整回答
反对 回复 2022-06-02
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信