我正在尝试创建一个新列,该列使用字典根据不同列中的某些条件分配值。
下面是字典和数据框架
fee = {
('CL', 'SB') :295,
('CL', 'NB') :150,
('BR', 'SB') :120,
('BR', 'NB') :120,
('AR', 'SB') :150,
('AR', 'NB') :150,
('CN', 'SB') :285,
('CN', 'NB') :215,
('MX', 'SB') :115,
('MX', 'NB') :115,
('UK', 'SB') :170,
('UK', 'NB') :120,
}
dateval= pd.DataFrame({'Country': ['CL', 'CL', 'MX', 'UK', 'CN', 'AR', 'AR', 'BR'],
'direction': ['SB', 'NB', 'SB', 'SB', 'NB', 'SB', 'SB', 'NB'],
'times': [1, 1, 1, 2, 1, 2, 1, 2],
'amountdesired': [295,150,115,290,215,300,150,240]
}
)
下面的代码在times = 1时运行良好
dateval['amountdesired']=dateval.loc[(dateval['times'].isin([1]))][['Country', 'direction']].apply(tuple, axis=1 ).map(fee)
当times = 2时,我希望对国家/地区使用这两个值
我知道我最终可以改变我的字典的结构,但我想知道我是否可以保持这样的结构,并使用一些聪明的方法来实现这一点。
谢谢你的帮助。
2条答案
按热度按时间lbsnaicq1#
您的尝试似乎已接近
apply()
方法。这是我的食谱:
lambda
和if row['times'] == 1
语句else row['Country'] + " + " + row['direction']
因此,在上面的情况下,您可以这样做:
这给出了:
wwwo4jvm2#
D.L的回答让我非常接近我想要的结果。
这就是我如何解决
谢谢大家!