根据列表类型列中的项目数创建熊猫重复行

时间:2021-02-18 07:08:20

标签: python pandas dataframe

我有一个这样的数据框,

  df
  col1     col2
   A        [1]
   B        [1,2]
   A        [2,3,4]
   C        [1,2]
   B        [4]

现在我想根据 col2 列表中的值数量创建新行,其中 col1 值将相同,因此最终数据框看起来像,

  df
  col1    col2
   A       [1]
   B       [1]
   B       [2]
   A       [2]
   A       [3]
   A       [4]
   C       [1]
   C       [2]
   B       [4]

我正在寻找一些熊猫捷径以更有效地完成

1 个答案:

答案 0 :(得分:1)

使用 DataFrame.explode 然后创建一个元素列表:

df2 = df.explode('col2')

df2['col2'] = df2['col2'].apply(lambda x: [x])

另一个想法,我希望在大数据中更快地使用 numpy np.repeatchain.from_iterable 来展平值:

from  itertools import chain

df2 = pd.DataFrame({
        "col1": np.repeat(df.col1.to_numpy(), df.col2.str.len()),
        "col2": [[x] for x in chain.from_iterable(df.col2)]})

print (df2)
  col1 col2
0    A  [1]
1    B  [1]
2    B  [2]
3    A  [2]
4    A  [3]
5    A  [4]
6    C  [1]
7    C  [2]
8    B  [4]
相关问题