如何使用优先级键将两个键上的熊猫数据帧连接在一起?

时间:2019-01-16 13:16:26

标签: python pandas dataframe join

如何在两个键(df1df2)上保持两个熊猫数据框(bla1bla2)的连接,其中bla2键应该是否在不为null时使用(请参见df1的最后两行)?

伪代码

如果bla2不为空,则在bla上加入bla2

否则在bla上加入bla1

数据框

df1

| bla1 | bla2 | a   | b   |
|------|------|-----|-----|
| 1    |      | ... | ... |
| 2    |      | ... | ... |
| 3    |      | ... | ... |
| 4    | 7    | ... | ... |
| 5    | 8    | ... | ... |

+ df2

| bla | x   | y   | z   |
|-----|-----|-----|-----|
| 1   | ... | ... | ... |
| 2   | ... | ... | ... |
| 3   | ... | ... | ... |
| 7   | ... | ... | ... |
| 8   | ... | ... | ... |

= df3

| bla1 | bla2 | a   | b   | x   | y   | z   |
|------|------|-----|-----|-----|-----|-----|
| 1    |      | ... | ... | ... | ... | ... |
| 2    |      | ... | ... | ... | ... | ... |
| 3    |      | ... | ... | ... | ... | ... |
| 5    | 7    | ... | ... | ... | ... | ... |
| 4    | 8    | ... | ... | ... | ... | ... |

1 个答案:

答案 0 :(得分:1)

[首先创建一个新列以合并两个列。

df1["new_column"] = df1.bla2.fillna(df1.bla1);

然后将两个框架都加入并放置额外创建的列。

df3 = pd.merge(df1, df2, how="inner", left_on="new_column", right_on="bla").drop(["new_column", "bla"], axis=1)