首页 > 解决方案 > 基于不同列中特定值的计算的新列

问题描述

我试图通过仅对某些值进行计算来创建一个新列,具体取决于它们是否与不同列中的某个字符串匹配。例如,

df1 = pd.DataFrame({'currency': ['USD', 'PKR', 'PKR', 'USD'], 'amount': [1000, 34000, 40000, 560]})

我想创建一个新列,我想在其中拥有相同的 PKR 值,但我希望 USD 值乘以 150。

这就是我想要的,

total = [150000, 34000, 40000, 84000]

df1['total'] = total

在这里,我手动将美元值相乘。我有兴趣获得总专栏。

标签: pythonpandas

解决方案


用于numpy.where按条件设置值:

df1['total'] = np.where(df1['currency'] == 'USD', df1['amount'] * 150, df1['amount'])


print (df1)
  currency  amount   total
0      USD    1000  150000
1      PKR   34000   34000
2      PKR   40000   40000
3      USD     560   84000

currency另一个想法,特别是如果需要按列创建字典的多个值,使用Series.map,不匹配的值替换为1最后多个列:

df1['total'] = df1['currency'].map({'USD':150}).fillna(1).mul(df1['amount'])

例如,如果还想通过PKRwith倍增20

df1['total'] = df1['currency'].map({'USD':150, 'PKR':20}).fillna(1).mul(df1['amount'])
print (df1)
  currency  amount   total
0      USD    1000  150000
1      PKR   34000  680000
2      PKR   40000  800000
3      USD     560   84000

推荐阅读