熊猫爆炸多列

时间:2020-07-08 18:41:55

标签: python pandas dataframe

我有多个列的DF。 其中两列是相同len的列表。(col2和col3是list。列表的len相同)。

我的目标是在其自己的行上列出每个元素。

我可以使用df.explode()。但只接受一栏。但是,我希望两列中的那对被“分解”。如果我先做df.explode('col2'),然后再做df.explode('col3'),则结果是9行而不是3行。

原始DF

col0      col1        col2        col3
1       aa          [1,2,3]     [1.1,2.2,3.3]
2       bb          [4,5,6]     [4.4,5.5,6.6]
3       cc          [7,8,9]     [7.7,8.8,9.9]
3       cc          [7,8,9]     [7.7,8.8,9.9]

结束数据帧

id      col1        col2        col3
1       aa          1           1.1
1       aa          2           2.2
1       aa          3           3.3
2       bb          4           4.4
2       bb          5           5.5
2       bb          6           6.6
3       cc          ...         ...

更新 该列均没有唯一值,因此不能用作索引。

2 个答案:

答案 0 :(得分:4)

您可以将.card { display: flex; flex-direction: row; background-color: #005792; width: 450px; height: 150px; border-radius: 5px; overflow: hidden; } .music-controls{ display: flex; flex-grow: 2; } .image { display: flex; flex-grow: 1; background-color: #fd5f00; }设置为索引,并在各列中应用pd.Series.explode

<div class="card">
  <div class="music-controls">
    <div>Music controls</div>
  </div>
  <div class="image">Album Cover</div>
</div>

答案 1 :(得分:0)

熊猫没有多栏爆炸。您可以尝试以下方法:

df = pd.DataFrame({'A': [1, 2], 'B': [['a','b'], ['c','d']], 'C': [['z','y'], ['x','w']]})

A    B     C
--------------
1 [a, b] [z, y]
2 [c, d] [x, w]

##Logic for multi-col explode
list_cols = {'B','C'}
other_cols = list(set(df.columns) - set(list_cols))
exploded = [df[col].explode() for col in list_cols]
df2 = pd.DataFrame(dict(zip(list_cols, exploded)))
df2 = df[other_cols].merge(df2, how="right", left_index=True, right_index=True)

A B C
------
1 a z
1 b y
2 c x
2 d w