在 Pandas 中,如果你有两个 DataFrame 并且想要取某个字段的差集,可以使用 `set` 操作来实现。这可以帮助你找到在一个 DataFrame 中存在但在另一个 DataFrame 中不存在的值。
以下是一个示例,演示如何取两个 DataFrame 在某个字段上的差集:
示例数据
假设我们有两个 DataFrame `df1` 和 `df2`,它们都有一个共同的字段 `id`:
python
 import pandas as pd
data1 = {
     'id': [1, 2, 3, 4, 5],
     'value': ['A', 'B', 'C', 'D', 'E']
 }
data2 = {
     'id': [4, 5, 6, 7, 8],
     'value': ['D', 'E', 'F', 'G', 'H']
 }
df1 = pd.DataFrame(data1)
 df2 = pd.DataFrame(data2)
print("DataFrame 1:")
 print(df1)
 print("\nDataFrame 2:")
 print(df2)
  取字段的差集
我们希望找到在 `df1` 中存在但在 `df2` 中不存在的 `id` 值。
#### 方法一:使用 `set` 操作
python
  将 'id' 字段转换为集合
 set1 = set(df1['id'])
 set2 = set(df2['id'])
 取差集
 difference = set1 - set2
 print("\nDifference (in df1 but not in df2):")
 print(difference)
 #### 方法二:使用 Pandas 的布尔索引
python
  使用 Pandas 的布尔索引取差集
 difference_df = df1[~df1['id'].isin(df2['id'])]
 print("\nRows in df1 but not in df2 based on 'id':")
 print(difference_df)
  完整代码
以下是完整代码的示例:
python
 import pandas as pd
 示例数据
 data1 = {
     'id': [1, 2, 3, 4, 5],
     'value': ['A', 'B', 'C', 'D', 'E']
 }
data2 = {
     'id': [4, 5, 6, 7, 8],
     'value': ['D', 'E', 'F', 'G', 'H']
 }
df1 = pd.DataFrame(data1)
 df2 = pd.DataFrame(data2)
print("DataFrame 1:")
 print(df1)
print("\nDataFrame 2:")
 print(df2)
 使用 set 操作取差集
 set1 = set(df1['id'])
 set2 = set(df2['id'])
 difference = set1 - set2
 print("\nDifference (in df1 but not in df2):")
 print(difference)
 使用 Pandas 的布尔索引取差集
 difference_df = df1[~df1['id'].isin(df2['id'])]
 print("\nRows in df1 but not in df2 based on 'id':")
 print(difference_df)
  输出结果
plaintext
 DataFrame 1:
    id value
 0   1     A
 1   2     B
 2   3     C
 3   4     D
 4   5     E
DataFrame 2:
    id value
 0   4     D
 1   5     E
 2   6     F
 3   7     G
 4   8     H
Difference (in df1 but not in df2):
 {1, 2, 3}
Rows in df1 but not in df2 based on 'id':
    id value
 0   1     A
 1   2     B
 2   3     C
 这个示例展示了如何找到在 `df1` 中存在但在 `df2` 中不存在的 `id` 值。你可以根据需要选择适合的方法。