python - 一种更 Pythonic 的方法,将一列拆分为多列并将其中两列相加
问题描述
示例代码:
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3], 'bbox': [[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0]]})
目标:
df = pd.DataFrame({'id': [1, 2, 3], 'bbox': [[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0]], 'x1': [1, 5, 9], 'y1': [2, 6, 10], 'x2': [4, 12, 20], 'y2': [6, 14, 22]})
换句话说,我想在数据框中添加四个整数列,其中前两个只是 中每个列表的前两个元素,bbox
后两个分别是每个列表的第一个和第三个元素的总和,总和第二个和第四个。目前,我这样做:
df[['x1', 'y1', 'w', 'h']] = pd.DataFrame(df['bbox'].values.tolist(), index=df.index).astype(int)
df.assign(x2 = df['x1']+df['w'], y2 = df['y1']+df['h'])
df.drop(['w', 'h'], axis = 1)
这对我来说似乎有点令人费解。有没有办法避免创建中间列w
and h
,或者它会降低代码的可读性?可读性对我来说比保存一个代码行更重要,因此如果没有可读的替代方案,我将满足于这个解决方案。
解决方案
我认为您可以在第一步中创建x2
和:y2
df1 = pd.DataFrame(df['bbox'].values.tolist(),index=df.index).astype(int)
df[['x1', 'y1', 'x2', 'y2']] = df1
df = df.assign(x2 = df['x1']+df['x2'], y2 = df['y1']+df['y2'])
print (df)
id bbox x1 y1 x2 y2
0 1 [1.0, 2.0, 3.0, 4.0] 1 2 4 6
1 2 [5.0, 6.0, 7.0, 8.0] 5 6 12 14
2 3 [9.0, 10.0, 11.0, 12.0] 9 10 20 22
或使用+=
:
df1 = pd.DataFrame(df['bbox'].values.tolist(),index=df.index).astype(int)
df[['x1', 'y1', 'x2', 'y2']] = df1
df['x2'] += df['x1']
df['y2'] += df['y1']
推荐阅读
- android - 如何处理应用内购买中的动态支付
- r - 在 dplyr 中保留与其他 df 具有相同列字符的行
- javascript - JavaScript - 制作通用地图/查找/过滤功能
- scheme - 在 Chez Scheme 中引用数字常量
- pytorch - 为什么我的微调 DistilGPT2 模型没有生成新行?
- javascript - 为什么我不能将导航定位为下拉过渡?
- python - Django 命令:如何在 Windows Server 上正确调度
- google-cloud-platform - 将 Google Cloud 成本降至零(计算引擎)
- python - Clion(使用 CMake)在设置 python 解释器时会感到困惑
- python - 使用 HM NSIS 编辑创建安装程序,“无法执行主脚本”