加入3个熊猫数据框
问题描述:
让我首先说一句,我不确定这是否是最好的方法,但我写了一些代码来创建一个熊猫的数据框,其中包含我左边数据框的索引值和一个从我的右边的数据框中,在特定的空间条件匹配。这是您的基本空间连接,但具有一些附加属性。索引值是正确的。加入3个熊猫数据框
我的问题是,我怎样才能将第三个数据框连接到左右数据框?
我需要支持以下内容:
- 如果我希望将所有(来自DF1和DF2),我该怎么办呢?
- 默认情况下,我想保留所有左边的数据帧值,所以我的连接数据帧有这样的值:
[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是这样的:
- 在join_df的数据是左数据框(DF1)和DF2加入该行的索引在第2栏中。
- 该连接可以是多对多,1:m或许多为1.
目标是来自df1的所有行将与df2中的所有行匹配。可选地,(奖金问题),如果在df1到df2中不存在匹配,df1的记录是否可以保存?与df2相同?
谢谢
答
您可以在join_df
左栏和df1
或df2
索引使用DataFrame.merge
和匹配。使用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
可以通过指定join_df[df1.columns | df2.columns]
排除idx
列。如果您希望避免丢弃值,则可以使用how='outer'
,但可能需要调整结果以匹配所需的输出。
你可以告诉你如何看待输出数据帧吗?这并不完全清楚你想要什么结果。 – ASGM