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

2024-09-26 18:18:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个df

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_pl)的幂,如果从df1.cur中找不到对应的df2.cur_key,例如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

Tags: keydfindexamountdecusdpldf1
1条回答
网友
1楼 · 发布于 2024-09-26 18:18:23

可能的问题是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()

或删除重复项-仅保留每个cur_key的第一个或最后一个值:

#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

相关问题 更多 >

    热门问题