我有一个数据框,其中包含所有可供出售的选项:
options = pd.DataFrame({'Name':['a', 'b', 'c', 'd'],
'Price':[1,3,6,4],
'Size':[12,32,44,68],
'Content':[10,8,22,20]}
以及需求列表:
criteria = pd.DataFrame({'Customer':['a1', 'b2', 'c3', 'd4'],
'MinSize':[8,20,12,40],
'MinContent':[18,6,21,4]}
我需要从满足最低标准的选项中获取最低价格,结果是:
pd.DataFrame({'Customer':['a1', 'b2', 'c3', 'd4'],
'MinSize':[8,20,12,40],
'MinContent':[18,6,21,4],
'MatchingOption':['d','b','c','d']}
这相当于 SQL 中的 TOP 1 WHERE Content >= MinContent AND Size >= MinSize ORDER BY Price ASC
。
如何根据匹配记录的有序列表的 TOP 1 结果连接数据框?
最佳答案
对于criteria
中的每一行,过滤掉Size>=MinSize
和Content>=MinContent
的options
>,然后对 Price
列进行排序并获取 Name
的第一个值,将结果系列分配回标准数据帧的新列:
result=(criteria.assign(MatchingOption=criteria
.apply(lambda x:
options[(options['Size'].ge(x['MinSize']))
& (options['Content'].ge(x['MinContent']))]
.sort_values('Price').iloc[0]['Name'],
axis=1))
)
输出:
Customer MinSize MinContent MatchingOption
0 a1 8 18 d
1 b2 20 6 b
2 c3 12 21 c
3 d4 40 4 d
关于python - pandas 根据匹配记录的有序列表的 TOP 1 结果连接数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68731462/