gpt4 book ai didi

python - 如何动态地将 Pandas 列转换为行

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:11 25 4
gpt4 key购买 nike

我在 Pandas 中有以下数据框

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 和 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

我正在跟进 Pandas 。

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 列下。任何帮助表示赞赏。

最佳答案

您可以使用 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

关于python - 如何动态地将 Pandas 列转换为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58047953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com