如何在Pandas DataFrame中将元组/列表按指定规则拆分至新列
Pandas提取嵌套列表元素生成新列
问题描述
现有Pandas DataFrame的col1列包含嵌套列表数据:
col1 [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]] [[13,14],[15,16],[17,18],[19,20],[21,22],[23,24]]
需要将每行中6个二元子列表的第一个元素汇总为col2,第二个元素汇总为col3,最终得到如下结构:
col2 col3 [1,3,5,7,9,11] [2,4,6,8,10,12] [13,15,17,19,21,23] [14,16,18,20,22,24]
解决方案
方法一:列表推导式 + apply(简洁直观)
通过apply遍历col1的每一行,用列表推导式提取每个子列表的对应元素:
import pandas as pd # 构造示例数据 data = { 'col1': [ [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]], [[13,14],[15,16],[17,18],[19,20],[21,22],[23,24]] ] } df = pd.DataFrame(data) # 生成新列 df['col2'] = df['col1'].apply(lambda x: [item[0] for item in x]) df['col3'] = df['col1'].apply(lambda x: [item[1] for item in x]) # 保留目标列 df = df[['col2', 'col3']]
方法二:利用Pandas内置方法(大数据量更高效)
将每行的嵌套列表转为临时DataFrame,再通过agg(list)汇总元素,适合数据量较大的场景:
df[['col2', 'col3']] = df['col1'].apply( lambda x: pd.DataFrame(x).agg(list).T )
输出结果
col2 col3 0 [1, 3, 5, 7, 9, 11] [2, 4, 6, 8, 10, 12] 1 [13, 15, 17, 19, 21, 23] [14, 16, 18, 20, 22, 24]
内容的提问来源于stack exchange,提问作者Rajan Kumar Yadav
相关产品推荐
相关产品推荐

