python - 熊猫将行移动到单列并重塑数据框
问题描述
嗨,我有以下数据框约为 1,400,000 行:
x = pd.DataFrame({'ID':['A','B','D','D','F'], 'start1':[1,2,3,4,5], 'start2':[12,11,10,6,7], 'start3':[1,6,2,4,5], 'start4':[5,4,2,3,1], 'start5':[0,0,0,0,0], 'end1':[2,3,4,7,9] })
ID start1 start2 start3 start4 start5 end1
A 1 12 1 5 0 2
B 2 11 6 4 0 3
D 3 10 2 2 0 4
D 4 6 4 3 0 7
F 5 7 5 1 0 9
我希望将包含列标题“开始”或“结束”的所有行折叠成以下格式:
所需的输出:
ID start end
A 1 NaN
A 12 NAN
A 1 NAN
A 5 NaN
A 0 NaN
A NaN 2
B 2 NaN
B 11 NaN
B 6 NaN
B 4 NaN
B 0 NaN
B 3 NaN
...
F 1 NaN
F 0 NaN
F NaN 9
我努力了:
joined = df2.apply(lambda x: ' '.join([str(xi) for xi in x]), axis=1)
split = joined.str.split('', expand=True).reset_index(drop=False).melt(id_vars='index')
但是,这似乎耗尽了我所有的内存并且环境崩溃了。任何帮助都会很棒
解决方案
尝试melt
列start
和concat
(pd.concat([x.iloc[:,:-1].melt('ID', value_name='start')
.sort_values(['ID','variable']).drop('variable',axis=1),
x[['ID','end1']]
])
.sort_values('ID', kind='mergesort')
)
输出:
ID start end1
0 A 1.0 NaN
5 A 12.0 NaN
10 A 1.0 NaN
15 A 5.0 NaN
20 A 0.0 NaN
0 A NaN 2.0
1 B 2.0 NaN
6 B 11.0 NaN
11 B 6.0 NaN
16 B 4.0 NaN
21 B 0.0 NaN
1 B NaN 3.0
2 D 3.0 NaN
3 D 4.0 NaN
7 D 10.0 NaN
8 D 6.0 NaN
12 D 2.0 NaN
13 D 4.0 NaN
17 D 2.0 NaN
18 D 3.0 NaN
22 D 0.0 NaN
23 D 0.0 NaN
2 D NaN 4.0
3 D NaN 7.0
4 F 5.0 NaN
9 F 7.0 NaN
14 F 5.0 NaN
19 F 1.0 NaN
24 F 0.0 NaN
4 F NaN 9.0
请记住,您正在尝试在这里复制大量数据,因此您需要小心。
推荐阅读
- android - 我的颤振应用程序仅在调试模式下运行(USB 电缆)并且在我的设备中看不到它
- r - 无法连接到 rstudio 服务器
- c# - “图像”不包含“图像”的定义
- tkinter - 如何在鼠标悬停时修改标签面板颜色
- javascript - 如何获取带有标签的 HTML 元素文本
- c - 如何在没有strcmp的情况下比较指向字符串的指针?
- android - 如何从顶部垂直实现可拉伸布局
- python - 从 gitlab api 获取 wiki 文件夹并使用该文件夹中的文件
- javascript - 如何使用 Ajax 显示来自 BadRequest(message) 的字符串消息
- rest - 自priority-web-sdk ERP中的特定日期时间以来仅获取更改对象的最佳方法是什么