大熊猫将列中的字符串拆分为多个记录

时间:2019-04-16 17:06:29

标签: python pandas

我的数据框为df

col1   col2  col3
a;b;c  w;x     1
d;e;f  x;y     2
g;h;i  z;u;v   3

我想将col1col2列中的每个字符串拆分为单独的记录,以便数据框看起来像这样

col1    col2    col3
a       w       1
b       x       1
c       NaN     1
d       x       2
e       y       2
f       NaN     2
g       z       3
h       u       3
i       v       3

1 个答案:

答案 0 :(得分:4)

尝试使用Series.str.splitSeries.stackSeries.renamepandas.concatDataFrame.assignDataFrame.reset_index的组合,如下所示:

示例

df = pd.DataFrame([{'col1': 'a;b;c', 'col2': 'w;x', 'col3': 1}, {'col1': 'd;e;f', 'col2': 'x;y', 'col3': 2}, {'col1': 'g;h;i', 'col2': 'z;u;v', 'col3': 3}, {'col1': '1,2,3', 'col2': '2', 'col3': 4}])

print(df)

#     col1   col2  col3
# 0  a;b;c    w;x     1
# 1  d;e;f    x;y     2
# 2  g;h;i  z;u;v     3
# 3  1,2,3      2     4

df_new = (pd.concat([df[x].str.split('[;,]', expand=True).stack().rename(x)
                     for x in df[['col1', 'col2']]], axis=1)
          .reset_index(level=1, drop=True)
          .assign(col3=df.col3))

print(df_new)

  col1 col2  col3
0    a    w     1
0    b    x     1
0    c  NaN     1
1    d    x     2
1    e    y     2
1    f  NaN     2
2    g    z     3
2    h    u     3
2    i    v     3
3    1    2     4
3    2  NaN     4
3    3  NaN     4