Pandas中如何从col1补全col_2元素间缺失值生成col3列
解决方案
你的需求本质是对每一行,取col_2元素覆盖的数值区间(即col_2最小值到最大值的闭区间),提取col1中落在这个区间内的所有值,存入新列col3。
直接用apply逐行处理即可,代码如下:
import pandas as pd # 构造示例DataFrame data = {'col1':[[0,1,2,3,4,5],[0,1,2,3,4,5,6,7,8,9],[0,1,2,3]], 'col_2':[[2,4,5],[6,7,9],[0,1,2]]} df = pd.DataFrame(data) # 生成新列col3 df['col3'] = df.apply( lambda row: [num for num in row['col1'] if min(row['col_2']) <= num <= max(row['col_2'])], axis=1 )
运行后输出的DataFrame和你预期的结果完全一致:
col1 col_2 col3 0 [0, 1, 2, 3, 4, 5] [2, 4, 5] [2, 3, 4, 5] 1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [6, 7, 9] [6, 7, 8, 9] 2 [0, 1, 2, 3] [0, 1, 2] [0, 1, 2]
效率优化方案
观察你的数据可以发现,col1存储的是从0开始的连续升序整数列表,这种情况下不需要遍历每个元素判断,直接通过索引切片就能拿到结果,数据量大时运行速度更快:
df['col3'] = df.apply( lambda row: row['col1'][min(row['col_2']): max(row['col_2']) + 1], axis=1 )
内容的提问来源于stack exchange,提问作者Rory
相关产品推荐
相关产品推荐

