如何简单实现pandas多DataFrame按指定规则合并转换?
多pandas DataFrame按规则合并实现方案
核心实现逻辑:
- 先取三个DataFrame索引的交集,得到三个表共有的时间戳索引
- 再取三个DataFrame列名的交集,保证列维度对齐
- 将三个表按共有索引、共有列做切片对齐,保证行列位置一一对应
- 逐单元格判断,仅当三个表对应位置值均为1时填充1,其余位置填充NaN
可直接运行的实现代码
import pandas as pd import numpy as np # 输入示例数据 df1 = pd.DataFrame({'C1': [None, 1, None], 'C2': [1, None, 1]}, index=[0, 1, 4]) df2 = pd.DataFrame({'C1': [None, 1,1, None], 'C2': [1, None, 1,1]}, index=[0, 1,2, 4]) df3 = pd.DataFrame({'C1': [1,1, None,1], 'C2': [None, None, 1,None]}, index=[1, 2,3, 4]) # 取三个表共有的索引、共有的列 common_index = df1.index.intersection(df2.index).intersection(df3.index) common_cols = df1.columns.intersection(df2.columns).intersection(df3.columns) # 将三个表对齐到相同的行列结构 df1_a, df2_a, df3_a = [df.loc[common_index, common_cols] for df in [df1, df2, df3]] # 按规则生成合并结果 result = pd.DataFrame( np.where( (df1_a == 1) & (df2_a == 1) & (df3_a == 1), 1, np.nan ), index=common_index, columns=common_cols )
效果说明
上述代码运行后完全匹配需求:
- 仅保留三个表共有的索引
[1,4] - 索引1的C1列三个表值均为1,因此填充1,其余位置均不满足“三个值全为1”的条件,填充NaN
预期效果参考:
该实现无需多次调用
merge做表连接,通过索引切片对齐+向量化位运算实现,代码简洁且执行效率高,也可适配更多同结构DataFrame的扩展合并场景。
内容的提问来源于stack exchange,提问作者saman taheri
相关产品推荐
相关产品推荐

