python - 根据符号将列中的值拆分为新行
问题描述
我有这种形式的熊猫数据框:
A B C D
car 100 EUR T
train 20/r25 EUR/rUSD F
e-bike 10/r21 EUR/rGBP F
我想拆分此/r
符号上的这些列(包含该符号的列),以便其他列重复,如结果 df 所示:
结果df:
A B C D
car 100 EUR T
train 20 EUR F
train 25 USD F
e-bike 10 EUR F
e-bike 21 GBP F
解决方案
创建Index
或MultiIndex
使用DataFrame.set_index
所有未拆分的列,然后Series.str.split
使用DataFrame.stack
每一列,转换MultiIndex
为列并添加列DataFrame.reindex
的顺序,如原始列和删除level
列:
df1 = (df.set_index(['A', 'D'])
.apply(lambda x: x.str.split('/r', expand=True).stack())
.reset_index()
.reindex(df.columns, axis=1))
print (df1)
A B C D
0 car 100 EUR T
1 train 20 EUR F
2 train 25 USD F
3 e-bike 10 EUR F
4 e-bike 21 GBP F
编辑:
df1 = (df.set_index(['D','E', 'F','G'])
.apply(lambda x: x.str.split('\r', expand=True).stack(dropna=False))
.reset_index()
.reindex(df.columns, axis=1)
)
print (df1)
A B C D E \
0 NUMER DATA WAL OKRESY WIEKOWANIA W DNIACH NaN
1 DOKUMENTU OPERACJI UTA OKRESY WIEKOWANIA W DNIACH NaN
2 NaN NaN NaN do 90 od 91 do 180
3 NaN NaN NaN do 90 od 91 do 180
4 NaN 2015-03-09 EUR NaN NaN
5 NaN None PLN NaN NaN
6 NaN 2015-12-07 EUR NaN NaN
7 NaN None PLN NaN NaN
F G H
0 NaN NaN NaN
1 NaN NaN NaN
2 od 181 do 270 od 271 do 360 od 361
3 od 181 do 270 od 271 do 360 None
4 NaN NaN 10,56
5 NaN NaN 43,60
6 NaN NaN 1 368,24
7 NaN NaN 5 902,72
推荐阅读
- javascript - 将两个元素连接成数组中的字符串类型元素
- arrays - 为什么我没有正确打印我的字符串数组?
- ajax - Symfony 5 ajax 发布表单
- azure - Get-AzRecoveryServicesBackupItem:无法验证参数“容器”上的参数。参数为 null 或为空
- asp.net-core - 如何将 Identity server 4.0 添加为外部提供者?
- laravel - Laravel 8 - Envoyer 和 Homestead 部署问题
- solr - TYPO3 Solr:如何向索引器添加其他字段?
- python - datetime:获取带有时区偏移的时间戳
- android - Firebase Google Auth 无法在 Cordova Android 上运行
- git - GitLab 和 LFS 推送缺少文件