Ims*_*msa 14 python dataframe pandas
我有多列的 DF。其中两列是相同 len 的列表。( col2 和 col3 是列表。列表的 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]
Run Code Online (Sandbox Code Playgroud)
结束数据帧
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 ... ...
Run Code Online (Sandbox Code Playgroud)
更新没有任何列具有唯一值,因此不能用作索引。
您可以设置col1为索引并pd.Series.explode跨列应用:
df.set_index('col1').apply(pd.Series.explode).reset_index()
Run Code Online (Sandbox Code Playgroud)
或者:
df.apply(pd.Series.explode)
col1 col2 col3
0 aa 1 1.1
1 aa 2 2.2
2 aa 3 3.3
3 bb 4 4.4
4 bb 5 5.5
5 bb 6 6.6
6 cc 7 7.7
7 cc 8 8.8
8 cc 9 9.9
9 cc 7 7.7
10 cc 8 8.8
11 cc 9 9.9
Run Code Online (Sandbox Code Playgroud)
我从其他答案借用了这个解决方案(忘了在哪里):
df.explode(['col2', 'col3'])。
优点:比apply解决方案更快。
确保同一行的单元格中 col2 和 col3 具有相同数量的元素。
| 归档时间: |
|
| 查看次数: |
4323 次 |
| 最近记录: |