【发布时间】:2021-09-03 17:38:58
【问题描述】:
我有两个 pandas 数据帧(df1、df2),它们的行数和列数不同,每个 df 的特定列中有一些匹配值,需要注意的是 (1)每个df,以及(2)DataFrames中有不同数量的匹配值。
宝贝示例:
df1 = pd.DataFrame({'id1': [1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 6, 6]})
df2 = pd.DataFrame({'id2': [1, 1, 2, 2, 2, 2, 3, 4, 5],
'var1': ['B', 'B', 'W', 'W', 'W', 'W', 'H', 'B', 'A']})
我想做的是创建df3,其中df2['id2']与df1['id1']对齐/索引,这样:
-
当
df2[id2]与df1[id1]的匹配较少(或缺失)时,NaN被添加到df3[id2] -
如果
df1[id1]存在但与df2[id2]不匹配,则NaN添加到df3[id2]和df3[var1] -
'var1'用于所有df3[var1]的情况,其中df1[id1]和df2[id2]匹配 - 当
df2[id2]的匹配值多于df1[id1](或根本没有匹配)时,将删除行
生成的 DataFrame (df3) 应如下所示(注意 id2 = 5 和 var1 = A 已消失):
| id1 | id2 | var1 |
|---|---|---|
| 1 | 1 | B |
| 1 | 1 | B |
| 1 | NaN | B |
| 2 | 2 | W |
| 2 | 2 | W |
| 3 | 3 | H |
| 3 | NaN | H |
| 3 | NaN | H |
| 3 | NaN | H |
| 4 | 4 | B |
| 6 | NaN | NaN |
| 6 | NaN | NaN |
我找不到正确解决此问题的合并/加入/连接/对齐组合。目前,我尝试过的所有操作都按顺序堆叠行,而不在正确的单元格/行中添加 NaN,而是在 df3 的底部添加所有 NaN 值(所以 id1 和 id2 永远不会对齐) .非常感谢任何帮助!
【问题讨论】: