熊猫爆炸-无法从重复的轴重新索引

时间:2020-07-28 16:57:19

标签: python pandas dataframe

假设我有一个数据帧df

   C1      C2      C3      C4               C5
0  [A]     [1]     s1      [123]            t1  
1  [A]     [1]     s2      321              t2
2  [A,B]   [1,2]   s3      [777,111]        t3
3  [B]     [2]     s4      145              t4
4  [B]     [2]     s5      [990]            t5
5  [A,B,B] [1,2,2] s6      [124,125,765]    t6
6  [A,A]   [1,3]   s7      119              t7

我想爆炸一切,所以我一直在做

df = df.apply(pd.Series.explode)

但是,这给了我ValueError: cannot reindex from a duplicate axis。我已将罪魁祸首追溯到df的第6行(最后一行)。我知道当我在C1中拥有与C2中不一样长的东西时,才明白这一点。但是我不明白爆炸最后一行有什么问题。

如果我执行pd.DataFrame([[['A','B'],[1,2],'s7',119,'t7']]).apply(pd.Series.explode(),它可以正常工作,并且可以按预期提供以下信息:

   C1      C2      C3      C4         C5
0  A        1      s7      119        t7  
1  A        3      s7      119        t7

我无法弄清楚为什么最后一行是整个数据帧的一部分会导致错误。我检查了索引,它是唯一的。

1 个答案:

答案 0 :(得分:1)

清理过程可以正常工作。

df = pd.DataFrame({'C1': [["A"], ["A"], ["A","B"], ["B"], ["B"], ["A","B","B"], ["A","A"]],
 'C2': [[1], [1], [1,2], [2], [2], [1,2,2], [1,3]],
 'C3': ['s1', 's2', 's3', 's4', 's5', 's6', 's7'],
 'C4': [[123], 321, [777,111], 145, [990], [124,125,765], 119],
 'C5': ['t1', 't2', 't3', 't4', 't5', 't6', 't7']})

df.explode("C1").reset_index().drop("index",1).explode("C2").reset_index()\
    .drop("index",1).explode("C4").reset_index().drop("index",1)


输出

  C1 C2  C3   C4  C5
0  A  1  s1  123  t1
1  A  1  s2  321  t2
2  A  1  s3  777  t3
3  A  1  s3  111  t3
4  A  2  s3  777  t3
5  A  2  s3  111  t3
6  B  1  s3  777  t3
7  B  1  s3  111  t3
8  B  2  s3  777  t3
9  B  2  s3  111  t3