如何用Pandas展平DataFrame列中的列表并保留对应ID
展平DataFrame中的列表列并保留对应ID
嘿,这个需求用pandas的explode()方法就能完美解决,它专门用来处理这种把列表类型的列拆分成多行,同时保留其他列对应值的场景。
首先,先还原你的原始DataFrame(这里我们用bson.ObjectId来模拟你的数据类型):
import pandas as pd from bson import ObjectId # 构造原始DataFrame df = pd.DataFrame({ 'A': [ [ObjectId('5abb6fab81c0')], [ObjectId('5abb6fab81c3'), ObjectId('5abb6fab81c4')], [ObjectId('5abb6fab81c2'), ObjectId('5abb6fab81c1')] ], 'id': [0, 1, 2] })
接下来只需要一行代码就能完成展平:
flattened_df = df.explode('A').reset_index(drop=True)
执行后得到的flattened_df就是你想要的结果:
| A | id |
|---|---|
| ObjectId('5abb6fab81c0') | 0 |
| ObjectId('5abb6fab81c3') | 1 |
| ObjectId('5abb6fab81c4') | 1 |
| ObjectId('5abb6fab81c2') | 2 |
| ObjectId('5abb6fab81c1') | 2 |
简单解释一下:
explode('A')会把A列中的每个列表元素拆分成单独的行,同时id列的对应值会自动重复匹配reset_index(drop=True)是可选操作,用来重置结果的索引,让它从0开始连续编号,看起来更整洁
如果你的环境里没有bson库(比如不需要实际操作MongoDB数据),也可以用字符串来模拟ObjectId的显示效果,完全不影响explode的功能。
内容的提问来源于stack exchange,提问作者daiyue
相关产品推荐
相关产品推荐

