我有 2 个 dfs:
d1 = pd.DataFrame({
'ID':['ABC123', 'ABC124', 'ABC125', 'ABC126', 'ABC127', 'ABC128', 'ABC129', 'ABC130', 'ABC131', 'ABC132'],
'PRICE':[2365.34, 45.37, 225.25, 574.3, 23.34, 7.98, 2353.34, 79.42, 6554.09, 12.45],
'CUR':['GBp', 'EUR', 'GBP', 'USD', 'SEK', 'CHF', 'GBp', 'CHF', 'GBp', 'CHF']
})
d2 = pd.DataFrame({
'RECEIVED_CODE':['GBp', 'AUD'],
'CONVERTED_CODE':['GBP','USD'],
'CONVERSION_RATE':[100, 1]
})
我需要按照以下逻辑替换值:
如果值CUR1 df 与值RECEIVED_CODE2 df 相同,则需要在这一行中将自身的值替换为CUR,CONVERTED_CODE然后PRICE除以CONVERSION_RATE。
编码:
for row in d2.itertuples():
tmp = d1[d1.CUR == row.RECEIVED_CODE]
tmp['PRICE'] = tmp['PRICE'] / row.CONVERSION_RATE
tmp['CUR'] = row.CONVERTED_CODE
d1.update(tmp)
做它需要的,但是由于 d1 10k 行和 d2 - 10 行的数量,这段代码可以工作几分钟,这很长。
编码
d1['CUR'] = d1.CUR.map(d2.set_index('RECEIVED_CODE').CONVERTED_CODE).fillna(d1.CUR)
可以改成CUR,但是我没有成功CONVERTED_CODE适应这种改法。PRICE
如何优化?
提前致谢。
我会这样做:
首先,我们使用两个 DF 中的货币创建一个辅助 DF:
DataFrame.eval()允许您即时进行算术运算:
让我们用这个:
结果: