两个dataframe 取差集
时间: 2024-08-14 19:06:15 浏览: 111
在Python的数据处理库pandas中,如果你有两个DataFrame并且想要获取它们之间的差集,你可以使用`difference()`函数。这个操作会返回第一个DataFrame中不在第二个DataFrame中存在的所有行。以下是基本步骤:
```python
import pandas as pd
# 假设 df1 和 df2 是两个DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [2, 4], 'B': [5, 7]})
# 获取 df1 中除了 df2 所有元素的差集
diff_df = df1[~df1.isin(df2)]
print(diff_df)
```
这将输出 `df1` 中除了 `df2` 的共同元素外的所有行。注意这里我们使用了布尔索引来排除 `df2` 中存在的行。
相关问题
两个dataframe取差集
可以使用pandas的merge函数来实现两个dataframe求差集的操作。具体步骤如下:
1. 使用merge函数将两个dataframe按照某一列进行合并,合并方式为outer,即保留所有行。
2. 使用isnull函数判断哪些行在第一个dataframe中出现,在第二个dataframe中没有出现,即为差集。
3. 使用loc函数获取差集。
示例代码如下:
```python
import pandas as pd
# 创建两个dataframe
df1 = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]})
df2 = pd.DataFrame({'A': [3, 4, 5, 6], 'B': [7, 8, 9, 10]})
# 按照'A'列合并两个dataframe
merged_df = pd.merge(df1, df2, on='A', how='outer')
# 获取差集
diff_df = merged_df.loc[merged_df['B_x'].isnull()]
print(diff_df)
```
输出结果为:
```
A B_x B_y
4 5 NaN 9.
5 6 NaN 10.
1 5. NaN
1 2 6. NaN
```
其中,B_x列为第一个dataframe中的B列,B_y列为第二个dataframe中的B列。可以看到,差集为第一个dataframe中的第一、二行。
pandas 两个dataframe取差集
可以使用 pandas 库中的 `merge` 方法来实现两个 DataFrame 的取差集。具体操作如下:
```python
import pandas as pd
# 两个 DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})
df2 = pd.DataFrame({'A': [2, 3, 4], 'B': ['b', 'c', 'd']})
# 取差集
diff_df = pd.merge(df1, df2, how='outer', indicator=True).query("_merge == 'left_only'").drop('_merge', axis=1)
print(diff_df)
```
输出:
```
A B
0 1 a
2 3 c
```
这里使用 `merge` 方法将两个 DataFrame 按照列进行合并,并标记合并方式为“外连接(outer)”,以便保留两个 DataFrame 中的所有行。然后使用 `query` 方法筛选出合并后只存在于第一个 DataFrame 中的行,即为差集。最后使用 `drop` 方法删除标记列 `_merge`。
阅读全文