python - 在python中将垂直表格转换为水平表格(展平表格)
问题描述
import numpy as np
import pandas as pd
df = pd.read_csv(“data.csv”)
pd.pivot_table(df, index = ‘Employee ID’ , values = [ ‘ Member ID’, ‘Firstname’, ‘Lastname’] , aggfunc =‘first)
该格式似乎有效,但仅适用于一个值,我如何显示一切?
任何帮助表示赞赏。
解决方案
您可以使用set_index()
and unstack()
,但您需要修复列,例如:
In []:
df = pd.read_csv(“data.csv”)
df['ID'] = df['MemberID'] # Copy because you want it in the values too
df = df.set_index(['EmployeeID', 'MemberID']).unstack(level=1, fill_value='').sort_index(level=1, axis=1)
df.columns = df.columns.to_series().apply(lambda x: 'Member{}{}'.format(x[1], x[0]))
print(df)
Out[]:
Member1ID Member1Lastname Member1firstname Member2ID Member2Lastname Member2firstname Member3ID Member3Lastname Member3firstname
EmployeeID
1 1 Ann Anu 2 Ann Aju 3 vAnn Abi
2 1 John Cini 2 John Biju
3 1 Peter Mathew 2 Peter Joseph
但是我觉得如果你真的不需要 MemberID 在值中(你在列名中有它)或者你不介意MultiIndex
那么你可以简化:
In []:
df.set_index(['EmployeeID', 'MemberID']).unstack(level=1, fill_value='').swaplevel(axis=1).sort_index(axis=1)
Out[]:
MemberID 1 2 3
Lastname firstname Lastname firstname Lastname firstname
EmployeeID
1 Ann Anu Ann Aju Ann Abi
2 John Cini John Biju
3 Peter Mathew Peter Joseph
推荐阅读
- java - 无法从 application.yml 加载属性未绑定
- python - 如何在 Django 中以单一形式上传多个文件?
- javascript - 关于Axios的使用
- amazon-web-services - 在 puresec 的函数屏蔽上检测到空的 aws lambda 子进程执行
- wcf - 收到错误“合同不匹配 - 发送方和接收方之间的操作不匹配”
- c++ - 非类型模板参数:从 bool 到 int 的隐式转换有效,但从 double 到 int 无效。这是为什么?
- nativescript - 如何:使用 Webpack 自定义 CSS 文件?(本机脚本)
- php - Laravel:OVH 托管 SQLSTATE [HY000] [2002] 连接超时
- c++ - 调用哪个字符串构造函数?
- reactjs - 是否可以使用 redux-form、connect 和 withRouter?