python - 将列值与 dict 匹配
问题描述
我有一个字典和一个数据框,例如下面的示例 v 和 df。我想搜索 df 中的项目并返回与 dict 中的值具有最大数量的字段值的项目。在这种情况下,它将是第 3 项。我在想也许将 apply 与 lambda 函数一起使用,或者转置 df。我只是无法安静地绕过它。如果有人有巧妙的方法来做到这一点或任何提示,他们将不胜感激。
输入:
v={'size':1,'color':red}
df:
item size color
2 2 red
3 1 red
Output:
3
解决方案
另一种解决方案是使用字典而不是数据框:
v = {'size': 1, 'color': 'red'}
match_count = {}
fields = df.columns[1:]
for k, value in df.to_dict(orient='index').items():
match_count[value['item']] = sum(value[i] == v[i] for i in fields & v.keys())
结果
print(match_count)
# {2: 1, 3: 2}
res = max(match_count.items(), key=lambda x: x[1])
print(res)
# (3, 2)
推荐阅读
- python - python for-in -> if not in -> if -> del 进程无故停止工作
- r - 模块化和 SelectInput 使 actionButton 重复
- sql-server - 识别 2 个表(月 1、月 2)之间的变化。我正在使用联合/相交/除外
- c - 使用可传递性验证 C 中的电子邮件
- css - 为什么 CSS 视差效果需要 overflow-y?
- powershell - 如何杀死运行给定可执行文件的进程?
- reactjs - ReactJS:'languagefunction' 已声明但其值从未被读取
- javascript - net::ERR_CERT_AUTHORITY_INVALID 与新 Microsoft Edge 上的 JavaScript 提取请求
- r - 使用函数 & sapply 填充两个向量/输出两个向量
- r - 在 R markdown 中编织到 PDF 时,静态传单地图标记被切断