我有这种形式的pandas数据框:
A B C D
car 100 EUR T
train 20/r25 EUR/rUSD F
e-bike 10/r21 EUR/rGBP F
我想在此/r
符号上拆分那些列(包含该符号的thos列),以便重复其他列,如结果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
答案 0 :(得分:2)
用DataFrame.set_index
用所有未拆分的列创建Index
或MultiIndex
,然后用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