对 2 个 pandas DataFrame 进行异或运算
有什么方法可以从第一个 DataFrame 中删除第二个 DataFrame 中可以找到的所有行,并添加仅在第二个 DataFrame 中独有的行(= XOR)?这里有一个转折点:第一个 DataFrame 有一个列在比较过程中应被忽略。
import pandas as pd
df1 = pd.DataFrame({'col1': [1,2,3],
'col2': [4,5,6],
'spec': ['A','B','C']})
df2 = pd.DataFrame({'col1': [1,9],
'col2': [4,9]})
result = pd.DataFrame({'col1': [2,3,9],
'col2': [5,6,9],
'spec': ['B','C','df2']})
df1 = df1.astype(str)
df2 = df1.astype(str)
这类似于 UNION(不是 UNION ALL)操作。
合并
col1 col2 spec
0 1 4 A
1 2 5 B
2 3 6 C
和
col1 col2
0 1 4
1 9 9
至
col1 col2 spec
1 2 5 B
2 3 6 C
1 9 9 df2
Is there any way to remove from first DataFrame all rows which can be found in second DataFrame and add rows which are exclusive only in second DataFrame (= XOR)? Here's a twist: the first DataFrame has one column that shall be ignored during comparison.
import pandas as pd
df1 = pd.DataFrame({'col1': [1,2,3],
'col2': [4,5,6],
'spec': ['A','B','C']})
df2 = pd.DataFrame({'col1': [1,9],
'col2': [4,9]})
result = pd.DataFrame({'col1': [2,3,9],
'col2': [5,6,9],
'spec': ['B','C','df2']})
df1 = df1.astype(str)
df2 = df1.astype(str)
This is analogical to UNION (not UNION ALL) operation.
Combine
col1 col2 spec
0 1 4 A
1 2 5 B
2 3 6 C
and
col1 col2
0 1 4
1 9 9
to
col1 col2 spec
1 2 5 B
2 3 6 C
1 9 9 df2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以连接并删除重复项:
或过滤掉公共行并连接:
输出:
You could concatenate and drop duplicates:
or filter out the common rows and concatenate:
Output: