python - 熊猫:从长到宽投射/旋转多列?
问题描述
我正在尝试根据多列将我的数据从长到宽重新配置。我通常熟悉 cast 函数(来自 R)和 pivot 函数,但两者都没有让我得到想要的结果。
请参见下文 - 当前表是我目前拥有的:
d = {'Name': ['Tom','Tom','Tom','Tom','Tom','Tom','Jerry','Jerry','Jerry','Jerry'], 'col2': ['A','B','A','B','A','B','A','B','A','B'],
'Result':[10,5,9,2,0,1,10,2,4,5],'Change:':[8,8,4,4,3,3,0,0,8,8]}
df = pd.DataFrame(data=d)
然后图中的中间表是我想要的宽数据,我按名称和日期分组,然后将结果列设为值。对于每个 Name-Date,只有一个 Change 结果——所以我唯一需要加宽的列是 Type。
最后一步是计算类型 A 和 B 的每个 Name-Date 的 r^2 值。即输出表。
我尝试使用下面的cast 函数以及 pivot 函数。任何帮助将非常感激!
zz_cast=cast(df,'Type','Result(%)')
zz_pivot=df.pivot(index='Date',columns='Type', values='Result (%)')
解决方案
这是我为创建中间表(宽数据)所做的:
import numpy as np
import pandas as pd
d = {'Name': ['Tom','Tom','Tom','Tom','Tom','Tom','Jerry','Jerry','Jerry','Jerry'],
'Date': ['2018/07/31','2018/07/31','2018/04/30','2018/04/30','2018/01/31','2018/01/31','2018/10/31','2018/10/31','2018/07/31','2018/07/31'],
'Type': ['A','B','A','B','A','B','A','B','A','B'],
'Result':[10,5,9,2,0,1,10,2,4,5],'Change:':[8,8,4,4,3,3,0,0,8,8]}
df = pd.DataFrame(data=d)
df.set_index(['Name','Date','Type']).unstack().reset_index()
推荐阅读
- javascript - 在javascript中将多个对象转换为数组
- php - Mysql + PHP插入并从触发器获取最后一个插入ID
- javascript - 在每个函数执行之前和之后调用特定函数
- python - Pip 找不到元数据文件 - EnvironmentError
- angular - 使用角度/弹簧上传文件时出现MultipartException
- java - JavaFX eclipse 配置 - openJDK 10
- javascript - 未捕获的类型错误:无法在 Vg 处读取未定义 react-dom.production.min.js:134 的属性“当前”
- docker - docker 容器中的 tcp_keepalive_time
- python - Python 不断在文件中显示 cp1250 字符编码
- docker - 从 Docker gitlab CI 在 Verdaccio 上发布 npm 模块