如何对DataFrame行执行各种操作?

时间:2019-08-28 11:18:31

标签: python pandas dataframe

我有一个数据集,其中的货币数字以多种不同的货币给出,例如:

ID   X     Currency
1    10    AUD
2    20    NZD
3     5    GBP
4    15    USD

我希望创建一个新列,以显示所有转换为GBP的值:

 ID   X     Currency Converted X
 1    10    AUD      5.5
 2    20    NZD      10.4
 3     5    GBP      5
 4    15    USD      12.3

我有一个元组列表,其中包含货币和英镑的汇率:

exchange=[(AUD,0.55),(NZD,0.52),(USD,0.82)]

然后我尝试通过以下方式申请

 for a,b in exchange:
        df.loc[df['Currency']==a,'Converted X'] = df.apply(lambda row: row['X']*b)

产生错误:

KeyError: ('X', 'occurred at index Id')

for a,b in exchange:
        df.loc[df['Currency']==a,'X'] *= b)

产生错误:

KeyError: 'Converted X'

我看过groupby(),但是我现在不想总结数据,并且希望对每一行进行该操作。

2 个答案:

答案 0 :(得分:1)

为了安全起见,建议您将GBP汇率添加到交易所中,

{% for ... %}
    <div class="form-check form-check-inline">
      <input type="checkbox" class="form-check-input" id="materialInline{{ .id}}">
      <label class="form-check-label" for="materialInline{{ .id}}">{{ .title}}</label>
    </div>
{% endfor %}

答案 1 :(得分:0)

您可以将Series.mapSeries.mul乘以列X乘以-如果需要原始值X,如果字典中不存在值,则添加参数fill_value=1

df['Converted X'] = df['X'].mul(df['Currency'].map(dict(exchange)), fill_value=1)

print (df)
   ID   X Currency  Converted X
0   1  10      AUD          5.5
1   2  20      NZD         10.4
2   3   5      GBP          5.0
3   4  15      USD         12.3

您的解决方案应更改:

df['Converted X'] = df['X']
for a,b in exchange:
        df.loc[df['Currency']==a,'Converted X'] = df['X']*b
print (df)
   ID   X Currency  Converted X
0   1  10      AUD          5.5
1   2  20      NZD         10.4
2   3   5      GBP          5.0
3   4  15      USD         12.3