Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pandas ValueError:尝试基于另一个df的值进行计算时,无法从重复轴重新索引_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python pandas ValueError:尝试基于另一个df的值进行计算时,无法从重复轴重新索引

Python pandas ValueError:尝试基于另一个df的值进行计算时,无法从重复轴重新索引,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有两个dfs: df2 dec_pl cur_key 0 JPY 1 HKD df1 cur amount JPY 80 HKD 20 USD 70 我喜欢参考df2中的del_pl作为df1中的“cur”,并计算df1.converted_amount=df1.amount*10**(2-df2.dec_pl)作为df1;i、 例如df1.amount乘以10乘以(2-df2.dec\u pl)的幂,如果在df1.cur中找不

我有两个
df
s:

df2
dec_pl    cur_key
0         JPY
1         HKD

df1
cur    amount
JPY    80
HKD    20
USD    70
我喜欢参考
df2
中的
del_pl
作为
df1
中的“cur”,并计算
df1.converted_amount=df1.amount*10**(2-df2.dec_pl)
作为
df1
;i、 例如
df1.amount
乘以10乘以
(2-df2.dec\u pl)
的幂,如果在
df1.cur
中找不到相应的
df2.cur\u键,例如
USD
,则使用其金额

df1 = df1.set_index('cur')
df2 = df2.set_index('cur_key')
df1['converted_amount'] = (df1.amount*10**(2 - df2.dec_pl)).fillna(df1['amount'], downcast='infer')
但是我有

ValueError: cannot reindex from a duplicate axis 
我想知道最好的方法是什么,所以结果应该是这样的

df1
cur    amount    converted_amount
JPY    80        8000
HKD    20        200
USD    70        70

cur_key
列中,可能存在重复的问题,如:

print (df2)
   dec_pl cur_key
0       0     HKD
1       1     HKD


df1 = df1.set_index('cur')
解决方案是唯一
cur_key
的聚合副本-例如,通过
sum

df2 = df2.groupby('cur_key').sum()
或删除重复项-根据当前键仅保留第一个或最后一个值:

#first default value
df2 = df2.drop_duplicates('cur_key').set_index('cur_key')
#last value
#df2 = df2.drop_duplicates('cur_key', keep='last').set_index('cur_key')

df1['converted_amount'] = (df1.amount*10**(2 - df2.dec_pl)).fillna(df1['amount'], downcast='infer')
print (df1)
     amount  converted_amount
cur                          
JPY      80                80
HKD      20               200
USD      70                70