python - 如何在 pandas 中为 columns 参数进行多列转换

标签 python python-3.x pandas dcast

我有以下数据框

import pandas as pd
df = pd.DataFrame({'id':[1,2,3,4,5,6], 'id_2':[6,5,4,3,2,1],
'col_1':['A','A','A','B','B','B'],
'col_2':['X','Z','X','Z','X','Z'],
'value':[10,20,30,40,50,60]})

我想dcast它,所以我使用

df= df.pivot_table(index=['id','id_2'], columns=['col_1', 'col_2'],aggfunc=lambda x: x)

我不知道如何将 dropleveldf.columns 更改为 A_X,A_Z,B_X,B_Z多索引让我很困惑

有什么想法吗?

更新

我想结束

import numpy as np

df=pd.DataFrame({'id':[1,2,3,4,5,6], 'id_2':[6,5,4,3,2,1],
'A_X':[10,np.nan,30,np.nan,np.nan,np.nan],
'A_Z':[np.nan,20,np.nan,np.nan,np.nan,np.nan],
'B_X':[np.nan,np.nan,np.nan,np.nan,50,np.nan],
'B_Z':[np.nan,np.nan,np.nan,40,np.nan,60]})

最佳答案

您需要从 Multiindex 中删除顶级 value - by Index.droplevel或列表理解:

print (df.columns)
MultiIndex(levels=[['value'], ['A', 'B'], ['X', 'Z']],
           codes=[[0, 0, 0, 0], [0, 0, 1, 1], [0, 1, 0, 1]],
           names=[None, 'col_1', 'col_2'])

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

或者:

df.columns = [f'{b}_{c}' for a,b,c in df.columns]

df = df.reset_index()
print (df)

   id  id_2   A_X   A_Z   B_X   B_Z
0   1     6  10.0   NaN   NaN   NaN
1   2     5   NaN  20.0   NaN   NaN
2   3     4  30.0   NaN   NaN   NaN
3   4     3   NaN   NaN   NaN  40.0
4   5     2   NaN   NaN  50.0   NaN
5   6     1   NaN   NaN   NaN  60.0

另一种解决方案是在 pivot_table 中指定 value 参数:

df= df.pivot_table(index=['id','id_2'], columns=['col_1', 'col_2'], values='value')

print (df.columns)
MultiIndex(levels=[['A', 'B'], ['X', 'Z']],
           codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
           names=['col_1', 'col_2'])

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

   id  id_2   A_X   A_Z   B_X   B_Z
0   1     6  10.0   NaN   NaN   NaN
1   2     5   NaN  20.0   NaN   NaN
2   3     4  30.0   NaN   NaN   NaN
3   4     3   NaN   NaN   NaN  40.0
4   5     2   NaN   NaN  50.0   NaN
5   6     1   NaN   NaN   NaN  60.0

关于python - 如何在 pandas 中为 columns 参数进行多列转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55589125/

相关文章:

multithreading - python中的并行化方法

Python - 将多个相同维度的二维数组合并为一个二维数组

python - Pandas - 根据列名和行值应用样式/格式

python - 如何使用Python获取Azure的所有存储帐户名称及其访问 key

python - 字符串如何存储为 'sequence of Unicode code points' ?

python re.search regex - 如何在字符串的最后 4 位中搜索值

python - 在 Python ElementTree 中,如何判断元素是否为注释?

python - Pyspark - 如何检查两条记录中哪一条具有最新日期及其列值?

python - Pandas numpy.where() 使用 - 没有得到想要的结果

python - 计算 Pandas 当前行之前的空白数