让我首先说一下,我不确定这是否是最好的方法,但是我写了一些代码来创建一个pandas'数据框,其中包含我左边数据框的索引值和一个来自右边数据框的索引值特定空间条件匹配的地方。这是您的基本空间连接,但具有一些其他属性。索引值是正确的。
我的问题是,如何将左右数据帧与第3个数据帧一起加入?
我需要支持以下内容:
[1, None]
这会有问题吗?示例:
join_df = pd.DataFrame(data=[[0, 2], [1, 3], [2, None]], columns=['left_idx', 'right_idx'])
df1 = pd.DataFrame([["a", {5:5}], ["b", {4:5}], ["c", {12:5}]], columns=['A1', 'A2'])
df2 = pd.DataFrame([["b", {'a':5}], ["bbb", {'b':5}], ["ccc", {'c':5}]], columns=['B1', 'B2'])
所以join_df的工作原理如下:
目标是df1中的所有行都将与df2中的所有行匹配。 (红利问题),如果df1到df2中不存在匹配,是否可以保留df1的记录?与df2相同?
谢谢
答案 0 :(得分:1)
您可以使用DataFrame.merge
并匹配join_df
的左栏和df1
或df2
的索引。使用how='left'
将导致DataFrame仅包含join_df
中指定的值。
join_df = join_df.merge(df1, left_on='left_idx', right_index=True, how='left')
join_df = join_df.merge(df2, left_on='right_idx', right_index=True, how='left')
这给出了:
left_idx right_idx A1 A2 B1 B2
0 0 2.0 a {5: 5} ccc {u'c': 5}
1 1 3.0 b {4: 5} NaN NaN
2 2 NaN c {12: 5} NaN NaN
您可以通过指定idx
来排除join_df[df1.columns | df2.columns]
列。如果您想避免丢弃值,可以使用how='outer'
,但可能需要调整结果以匹配您想要的输出。