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

for*_*man 5 python dataframe pandas

假设我有一个数据框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
Run Code Online (Sandbox Code Playgroud)

我想把一切都炸掉 所以我一直在做

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

然而,这给了我ValueError: cannot reindex from a duplicate axis。我已将罪魁祸首追溯到 的第 6 行(最后一行)df。当我之前得到这个时,我明白了,当时我的内容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
Run Code Online (Sandbox Code Playgroud)

我不明白为什么最后一行是整个数据帧的一部分时会导致错误。我检查了索引,它都是唯一的。

Rob*_*ond 5

边走边清理,效果很好。

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)


Run Code Online (Sandbox Code Playgroud)

输出

  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
Run Code Online (Sandbox Code Playgroud)