首页 > 解决方案 > 通过与另一个 DataFrame 中的查找结果进行比较来过滤 DataFrame 中的行

问题描述

假设我有销售人员的实际销售额数据,如下所示:

df = pd.DataFrame({'Salesperson id': [1, 2, 3, 4], "Q3 sales": [105, 82, 230, 58]})
   Salesperson id  Q3 sales
0               1       105
1               2        82
2               3       230
3               4        58

我也有他们的销售配额,如下所示:

quotas_df = pd.DataFrame({'Salesperson id': [1, 2, 3, 4], "Quota": [88, 95, 200, 65]})
quotas_df = quotas_df.set_index('Salesperson id')

                Quota:
Salesperson id        
1                   88
2                   95
3                  200
4                   65

我想获得一个子集,df其中仅包含销售人员超出其销售配额的行。我尝试以下方法:

filtered_df = df[(df['Q3 sales'] > quotas_df.loc[df['Salesperson id']]['Quota'])]

这失败了:

ValueError: Can only compare identically-labeled Series objects

任何有关执行此操作的最佳方法的指示?

标签: pythonpandasdataframe

解决方案


您收到错误是因为两个 DataFrame 的索引未对齐。

(
    df.set_index('Salesperson id')
    .loc[lambda x: x['Q3 sales'] > quotas_df['Quota']]
)

推荐阅读