python - 通过与另一个 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
任何有关执行此操作的最佳方法的指示?
解决方案
您收到错误是因为两个 DataFrame 的索引未对齐。
(
df.set_index('Salesperson id')
.loc[lambda x: x['Q3 sales'] > quotas_df['Quota']]
)
推荐阅读
- reporting-services - SSRS - 为计数分隔多个值
- python - 如何访问 skimage RAG 的属性
- netbeans-8 - 实体类的新会话 bean - NetBeans 8.2
- android - resolutionStrategy 会影响依赖库吗
- amazon-web-services - 如何在时间间隔内控制/限制 aws lambda 函数的执行频率?
- excel - 范围左右公式
- c++ - 现代 C++ 中 STL API 的差异(当我在 VS2017 中切换目标时,从 x64 到 x86)
- ios - CollectionView 单元格出现在 collectionView 之外。
- c++ - Cereal 中的序列化和继承
- asp.net-mvc - 如何使以下按钮调用 GET 方法而不是 POST 方法?