python - 有条件地重塑熊猫
问题描述
我正在尝试重塑我的数据。我有战斗,并为在给定战斗中战斗的每个战士提供数据。我想在每场战斗中与对手一起占据第二行,并将该行中的值转换为列。我已经设法将我的初始数据集从长转向宽,但在最后一步中挣扎。
这是我的数据示例:
{'event_id': {0: '417', 1: '417', 2: '56', 3: '56'},
'fighter': {0: 'PRICE', 1: 'RABOTTE', 2: 'PRICE', 3: 'WILDER'},
'punches_landed|Jabs': {0: 51, 1: 25, 2: 1, 3: 12},
'punches_landed|Power Punches': {0: 10, 1: 11, 2: 19, 3: 16},
'punches_landed|Total Punches': {0: 61, 1: 36, 2: 20, 3: 28},
'punches_thrown|Jabs': {0: 271, 1: 94, 2: 86, 3: 49},
'punches_thrown|Power Punches': {0: 29, 1: 47, 2: 41, 3: 23},
'punches_thrown|Total Punches': {0: 300, 1: 141, 2: 127, 3: 72}}
所需的输出将类似于此
event_id fighter puncheslanded... punches_throwns... fighter2 puncheslanded2....punches_thrown2
417 PRICE ... ... RABOTTE
56 PRICE ... ... WILDER
这是我到目前为止所做的
#this pivoted the original dataset
fight_stats = fight_stats.pivot_table(['punches_landed','punches_thrown'],['event_id','fighter'],'punch_stat').reset_index()
解决方案
您需要MultIindex
按计数器创建GroupBy.cumcount
、整形按DataFrame.unstack
并最后MultiIndex
在列中展平按map
:
df = (df.set_index(['event_id',df.groupby('event_id').cumcount().add(1)])
.unstack()
.sort_index(axis=1, level=1))
df.columns = df.columns.map('{0[0]}{0[1]}'.format)
df = df.reset_index()
print (df)
event_id fighter1 punches_landed|Jabs1 punches_landed|Power Punches1 \
0 417 PRICE 51 10
1 56 PRICE 1 19
punches_landed|Total Punches1 punches_thrown|Jabs1 \
0 61 271
1 20 86
punches_thrown|Power Punches1 punches_thrown|Total Punches1 fighter2 \
0 29 300 RABOTTE
1 41 127 WILDER
punches_landed|Jabs2 punches_landed|Power Punches2 \
0 25 11
1 12 16
punches_landed|Total Punches2 punches_thrown|Jabs2 \
0 36 94
1 28 49
punches_thrown|Power Punches2 punches_thrown|Total Punches2
0 47 141
1 23 72
推荐阅读
- java - 您可以创建一个单独的方法来创建 JFrame 大小吗?
- python - 如何在 QWidget 中居中背景图像
- c# - SonarScanner 未在 SonarQube 中发布结果
- javascript - 如何通过加 2 修复未返回长度字符串值的“截断字符串”
- c# - UWP 键盘加速器 FN 问题
- python - 网络抓取 python/pandas 时忽略丢失的表:mlb 数据
- python-3.x - 如何使用 python selenium 从页面中递归地刮取表格
- linux-kernel - ACPI 定义块:系统总线的 _SB 和 _SB_ 之间的区别
- html - 转换 translateY 在 Safari 上不起作用
- c++ - 使用 cmake 静态链接到 Linux 中的 C++ AWS 开发工具包会因链接到共享对象文件而失败