如何基于同形状2D掩码快速创建Pandas新DataFrame?
基于掩码DataFrame生成新DataFrame的简便方法
直接用 pandas 的列筛选 + 合并操作就能快速实现,步骤如下:
首先准备数据:
import pandas as pd df_1 = pd.DataFrame(data=[[False, True],[True, False],[False, True], [False, False]]) df_2 = pd.DataFrame(data=[[1, 2],[3, 4],[5, 6], [7, 8]])
核心代码一行搞定:
result = pd.concat([df_2[col][df_1[col]].reset_index(drop=True) for col in df_1.columns], axis=1)
或者用 apply 写法更简洁:
result = df_2.apply(lambda col: col[df_1[col.name]].reset_index(drop=True), axis=0)
运行后得到的结果就是你要的:
0 1 0 3.0 2 1 NaN 6
代码逻辑说明
- 遍历每个列,
df_2[col][df_1[col]]会精准筛选出该列中掩码为True的对应数值 reset_index(drop=True)把筛选后的结果索引重置为从0开始,确保合并时按顺序对齐pd.concat(..., axis=1)将各列的筛选结果按列合并,空缺位置自动填充NaN
如果需要把数值转回整数类型(因为 NaN 会让列变成浮点型),可以再加一句:
result = result.astype('Int64')
这样结果就会变成:
0 1 0 3 2 1 NaN 6
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

