python - 根据用户输入,获取另一列的排名值
问题描述
我有一个数据框如下:
Card Nation Age Category Amount
A India Young House 225
A India Young Electrical 125
B India Young House 250
B India Young Electrical 160
B India Young Bike 110
C India Young Electrical 220
C India Young Bike 200
C India Young House 210
现在,我得到如下用户输入:
Nation Age Category Amount
India Young Electrical 145
India Young Bike 125
India Young House 225
现在,我需要在数据框中查找并相应地对卡片进行排名。在这种情况下,排名卡
output will be
B, C, A
基本上,我们需要将 use 输入的所有元素与 dataframe 中的所有元素进行比较,并输出最匹配的 Card 值的排名顺序。
在我们的例子中,因为Card "A" has no Category "Bike" it comes last in our Rank
. 其他卡具有所有给定的类别,因此我们比较金额.. 最接近的卡在排名中排在第一位。
有什么帮助吗?
解决方案
采用 -
temp = inp.merge(df,how='left',on=['Nation', 'Age', 'Category'])
temp['diff'] = (temp['Amount_x'] - temp['Amount_y']).abs()
temp = temp.sort_values(by=['diff'])
def get_cards(x):
extra = {'A','B','C'}.difference(set(x))
x=x.append(pd.Series(list(extra)))
return ",".join(x.tolist())
temp.groupby(['Nation','Age','Category'])['Card'].apply(lambda x: get_cards(x) )
输出
Nation Age Category
India Young Bike B,C,A
Electrical B,A,C
House A,C,B
Name: Card, dtype: object
推荐阅读
- python - 在数据框中使用字符串拆分列
- javascript - 如何用多个字符串数据绘制谷歌折线图
- hyperledger-fabric - Blockchain Ledger 如何在 peer 中实现/存储
- java - 我在使用 SQL 执行程序时遇到问题
- directx-11 - 创建交换链时如何解决此多重采样错误?
- php - 将键与值分开
- java - 在 java 中使用 log4j2 jdbc appender 自定义日志记录
- reactjs - 无法在 Next.js 项目中导入 PrimeReact 样式文件
- password-less - gce 的密码少 ssh
- python - 打印使用 tensorflow high API 设置的变量中的值