gpt4 book ai didi

python - Pandas:有没有办法使用类似 'droplevel' 的东西,并在处理过程中使用丢弃的级别标签作为前缀/后缀重命名其他级别?

转载 作者:太空狗 更新时间:2023-10-29 20:53:29 25 4
gpt4 key购买 nike

以下查询的屏幕截图:

Groupby Query

有没有一种方法可以轻松地删除上层列索引,并有一个带有标签的单一级别,例如 points_prev_amaxpoints_prev_amingf_prev_amaxgf_prev_amin 等等?

最佳答案

使用 list comprehension 设置新的列名:

df.columns = df.columns.map('_'.join)

Or:

df.columns = ['_'.join(col) for col in df.columns]

示例:

df = pd.DataFrame({'A':[1,2,2,1],
'B':[4,5,6,4],
'C':[7,8,9,1],
'D':[1,3,5,9]})

print (df)
A B C D
0 1 4 7 1
1 2 5 8 3
2 2 6 9 5
3 1 4 1 9

df = df.groupby('A').agg([max, min])

df.columns = df.columns.map('_'.join)
print (df)
B_max B_min C_max C_min D_max D_min
A
1 4 4 7 1 9 1
2 6 5 9 8 5 3

print (['_'.join(col) for col in df.columns])
['B_max', 'B_min', 'C_max', 'C_min', 'D_max', 'D_min']

df.columns = ['_'.join(col) for col in df.columns]
print (df)
B_max B_min C_max C_min D_max D_min
A
1 4 4 7 1 9 1
2 6 5 9 8 5 3

如果需要 prefix 元组的简单交换项:

df.columns = ['_'.join((col[1], col[0])) for col in df.columns]
print (df)
max_B min_B max_C min_C max_D min_D
A
1 4 4 7 1 9 1
2 6 5 9 8 5 3

另一种解决方案:

df.columns = ['{}_{}'.format(i[1], i[0]) for i in df.columns]
print (df)
max_B min_B max_C min_C max_D min_D
A
1 4 4 7 1 9 1
2 6 5 9 8 5 3

如果列的 len 很大 (10^6),则使用 to_seriesstr.join :

df.columns = df.columns.to_series().str.join('_')

关于python - Pandas:有没有办法使用类似 'droplevel' 的东西,并在处理过程中使用丢弃的级别标签作为前缀/后缀重命名其他级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39405971/

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