python - 如何在 pandas 中为 columns 参数进行多于一列的 dcast
问题描述
我有以下dataframe
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)
不知怎么droplevel
改成df.columns
的A_X,A_Z,B_X,B_Z
。让multi-index
我困惑
有任何想法吗 ?
更新
我想结束
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]})
解决方案
value
您需要从Multiindex
- byIndex.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
另一种解决方案是value
在中指定参数pivot_table
:
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
推荐阅读
- android - 二进制 XML 文件第 2 行:二进制 XML 文件第 2 行:膨胀类 android.support.v4.widget.DrawerLayout 时出错
- wordpress - 考虑到带宽、并发连接等限制,开发具有大量用户群的应用程序后端的最佳策略?
- amazon-web-services - AWS:“eb deploy my-env”给出错误:ServiceError - 检测到 1 个验证错误..成员的长度必须小于或等于 100
- sql-server - 完全包含的数据库和 Azure SQL 单一数据库有什么区别
- xml - 如何从任何数据类型 BPEL 中获取数据?[xpath/xquery]
- javascript - 每个数组的元素被放入一个对象
- menu - 构建自定义 DNN 电子商务超级菜单并从单独的 ERP 数据库中恢复产品类别并将两者链接起来
- javascript - 将平面数组转换为分层数组
- mysql - 使用express js框架在node js中关闭mysql的理想连接
- javascript - Javascript中是否有将数字(带小数位)转换为单词的功能?