【发布时间】:2018-04-20 09:06:20
【问题描述】:
我有两个具有相同列名的 DataFrame,其中包含一些匹配的数据和一些唯一的数据。
我想排除中间,只保存两个 DataFrame 独有的内容。
我将如何连接、合并或加入这两个数据框来做到这一点?
例如在这张图片中,我不想要这张图片的中间,我想要两边而不是中间:
这是我现在的代码:
def query_to_df(query):
...
df_a = pd.DataFrame(data_a)
df_b = pd.DataFrame(data_b)
outer_results = pd.concat([df_a, df_b], axis=1, join='outer')
return df
让我举个例子说明我需要什么:
df_a =
col_a col_b col_c
a1 b1 c1
a2 b2 c2
df_b =
col_a col_b col_c
a2 b2 c2
a3 b3 c3
# they only share the 2nd row: a2 b2 c2
# so the outer result should be:
col_a col_b col_c col_a col_b col_c
a1 b1 c1 NA NA NA
NA NA NA a3 b3 c3
或者我也会对 2 个数据框感到满意
result_1 =
col_a col_b col_c
a1 b1 c1
result_2 =
col_a col_b col_c
a3 b3 c3
最后,您会注意到 a2 b2 c2 被排除在外,因为所有列都匹配 - 我如何指定要根据所有列加入,而不仅仅是 1?如果df_a 有a2 foo c2,我也希望该行也在result_1 中。
【问题讨论】:
-
我认为您正在寻找
pd.merge而不是pd.concat。实际上,不太清楚你是如何合并的......我认为更准确的描述是你得到的行只存在于一个表中。即使那样,我也不确定你为什么将它们并排放置,因为现在你有 2 个col_a和col_b和col_c
标签: python pandas dataframe outer-join