首页 > 解决方案 > 根据符号将列中的值拆分为新行

问题描述

我有这种形式的熊猫数据框:

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

标签: pythonpandasdataframe

解决方案


创建IndexMultiIndex使用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  

推荐阅读