python - 如何比较熊猫数据框中的行子集
问题描述
我有一个巨大的熊猫数据框,如下所示:
id type price min max
1 ch 10 10 100
1 fo 8 20 100
1 dr 7 10 90
1 ad 5 16 20
1 dr 6 10 90
1 fo 4 20 100
2 ch 5 40 50
2 fo 3 10 50
2 ch 3 40 50
... ... ... ... ...
我想添加一个新列“匹配”来获得这样的结果:
id type price min max match
1 ch 10 10 100 false
1 fo 8 20 100 false
1 dr 7 10 90 false
1 ad 5 16 20 false
1 dr 6 10 90 true
1 fo 4 20 100 true
2 ch 5 40 50 false
2 fo 3 10 50 false
2 ch 3 40 50 true
... ... ... ... ... ...
我尝试使用移位:
df['match']=np.where((df['id'] == df['id'].shift()) & (df['type'] == df['type'].shift()) & (df['min'] == df['min'].shift()) & (df['max'] == df['max'].shift()),true, false)
但这只是将当前行与前一行进行比较。没有特定的模式来确定与条件匹配的先前行的数量。我想选择 id 作为窗口来比较行。有没有办法做到这一点?
任何建议都受到高度赞赏。
谢谢
解决方案
您可以使用duplicated
指定的subset
列来考虑:
df.assign(match=df.duplicated(subset=['id', 'type', 'min', 'max']))
id type price min max match
0 1 ch 10 10 100 False
1 1 fo 8 20 100 False
2 1 dr 7 10 90 False
3 1 ad 5 16 20 False
4 1 dr 6 10 90 True
5 1 fo 4 20 100 True
6 2 ch 5 40 50 False
7 2 fo 3 10 50 False
8 2 ch 3 40 50 True
推荐阅读
- wcf - Shopify 与 Newtonsoft (JSON.NET) 问题
- ios - 如何在快速日期字符串中使用破折号(“-”)?
- javascript - JS React Native / Expo 中的可选要求
- arrays - 列中当前值的计数
- javascript - 如何防止 jQuery click 事件同时在多个元素上触发?
- javascript - 剑道参数映射返回未定义
- ios - 使用 VNRectangleObservation 裁剪 UIImage
- python - 如何在 Beautifulsoup 4 中检索包含特定文本的 href?
- python - 只是想比较一个项目但得到一个 UndefinedVariableError
- php - 当我的用户尝试登录到他们的仪表板时,出现尝试获取非对象错误的属性