首页 > 解决方案 > 使用相同的 ID,pandas 从多个列表创建多行

问题描述

我有一个像这样的示例数据框,列:IDMain

ID,Main
0,[30 115 266 38;662 99 1199 43] [511 133 25 47] [664 162 49 22]

如何使用 pandas 使我的数据框如下所示

预期产出

ID,Main
0,30 115 266 38
0,662 99 1199 43
0,511 133 25 47
0,664 162 49 22

标签: pythonpandasdataframe

解决方案


首先by ,然后在by for of s 之间提取值。replace ;][[]findallSerieslist

最后创建DataFrame,重塑,stack并通过一些数据清理reset_index

s = df['Main'].fillna('').str.replace(';','][').str.findall('\[(.*?)\]')
df = (pd.DataFrame(s.values.tolist(), index=s.index)
        .stack()
        .reset_index(level=1, drop=True)
        .reset_index())
df.columns = ['ID','Main']
print (df)
   ID            Main
0   0   30 115 266 38
1   0  662 99 1199 43
2   0   511 133 25 47
3   0   664 162 49 22

另一个解决方案Series

s = df['Main'].fillna('').str.strip('[]').str.split(';|\]\s+\[')

推荐阅读