首页 > 解决方案 > 将列值拆分为一对一映射

问题描述

以下问题的扩展: Split (explode) pandas dataframe string entry to separate rows

东风:

    STATE CITY  ALT_NAMES
0   S1    C1    A1@A2
1   S2    C2    A3@A4@A5 

我怎样才能达到以下结果:

out_df :

    STATE  CITY  CITY_VAR
0   S1     C1    A1
1   S1     C1    A2
2   S2     C2    A3
3   S2     C2    A4
4   S2     C2    A5

样本数据 :

    STATE CITY            ALT_NAMES
    FL    FT. MYERS       FORT MYERS@FT MYERS
    FL    NORTH FT MYERS  N.FT.MYERS@N. FORT MYERS@NORTH FORT MYERS

标签: pythonpandasdataframe

解决方案


对我来说工作:

df = explode(df.assign(ALT_NAMES=df.ALT_NAMES.str.split('@')), 'ALT_NAMES')
print (df)
  STATE CITY ALT_NAMES
0    S1   C1        A1
1    S1   C1        A2
2    S2   C2        A3
3    S2   C2        A4
4    S2   C2        A5

另一个纯熊猫解决方案:

df = (df.join(df.pop('ALT_NAMES')
                .str.split('@', expand=True)
                .stack()
                .reset_index(level=1, drop=True)
                .rename('ALT_NAMES'))
        .reset_index(drop=True ))
print (df)
  STATE            CITY         ALT_NAMES
0    FL       FT. MYERS        FORT MYERS
1    FL       FT. MYERS          FT MYERS
2    FL  NORTH FT MYERS        N.FT.MYERS
3    FL  NORTH FT MYERS     N. FORT MYERS
4    FL  NORTH FT MYERS  NORTH FORT MYERS

推荐阅读