如何合并索引与列均不同的Pandas数据集?
实现类似字典合并逻辑的Pandas DataFrame合并函数
我确定网站上已有类似问题,但一直找不到。我肯定不是第一个碰到这个问题的人。本质上,我需要一个能像嵌套字典合并那样处理Pandas DataFrame的合并函数。如果A和B是嵌套字典,可以用如下代码实现合并:
C = {k: A.get(k, {}) | B.get(k, {}) for k in set().union(*[A, B])}
具体需求如下:
- 有两个Pandas数据集A和B,二者的索引与列集合不同(但不一定完全不相交)
- 要生成数据集C:索引为A和B索引的并集,列为A和B列的并集
- 每个索引/列位置的值规则:若B在该位置有非NaN值则取B的值,否则取A的值
- 需要实现一个
SuperMerge方法,调用方式为C = A.SuperMerge(B),逻辑可描述为:C[i,c] = B.get([i, c]) if not B.get([i, c]).isna() else A.get([i, c])
这个逻辑和Python字典的更新逻辑类似:合并后的字典拥有两者键的并集,优先取右侧字典的值,否则取左侧的。
示例
原始DataFrame df1
import pandas as pd df1 = pd.DataFrame({'col1': ['a', 'b'], 'col2': [1, 2], 'col4': ['col4_x', 'col4_y']}, index=['x', 'y'])
输出:
col1 col2 col4 x a 1 col4_x y b 2 col4_y
原始DataFrame df2
df2 = pd.DataFrame({'col1': ['ALT', 'c'], 'col3': ['ONE', 'THREE'], 'col4': [pd.NA, 'col4_z']}, index=['x', 'z'])
输出:
col1 col3 col4 x ALT ONE <NA> z c THREE col4_z
合并结果
df1.SuperMerge(df2)
输出:
col1 col2 col3 col4 x ALT 1 ONE col4_x y b 2 <NA> col4_y z c <NA> THREE col4_z
内容的提问来源于stack exchange,提问作者eriophora
相关产品推荐
相关产品推荐

