我有多个列的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 ... ...
更新 该列均没有唯一值,因此不能用作索引。
答案 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