首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python熊猫DataFrame遍历行,比较两列并应用函数

python熊猫DataFrame遍历行,比较两列并应用函数
EN

Stack Overflow用户
提问于 2017-09-14 21:45:52
回答 2查看 2K关注 0票数 2

我有一个有两列的DataFrame:

代码语言:javascript
复制
df:
ix             Col1   Col2
1               11.0  'JPY'
2               51.0  'EUR'

..
1000,000        27.0  'CAD'

我有一个货币列表l1 = ['JPY','EUR',...,'CAD']我有一个转换l2 = [5.0, 1.0, ..., 0.5]列表

我还创建了一个函数:

代码语言:javascript
复制
def convert_currency(symbol, amount):
    index_value = list_of_symbols.index(symbol)
    rate = list_of_values[index_value]
    converted = amount * rate
    return converted

我想把这个功能应用于以下几个方面:

代码语言:javascript
复制
for index, row in df.iterrows():
    if row['currency'] != 'GBP':
        row['price_inc'] = convert_currency(row['currency'], row['price_inc'])

但不起作用。

将函数应用于基于col1值的col2值的快速工作解决方案是什么?该函数输入col1值和返回值,以取代col1值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-14 21:57:20

IIUC您可以使用以下矢量化方法:

源数据集:

代码语言:javascript
复制
In [108]: d1
Out[108]:
   ix  Col1 Col2
0   1  11.0  JPY
1   2  51.0  EUR
2   3  27.0  CAD

In [109]: l1 = ['JPY','EUR','CAD']

In [110]: l2 = [5.0, 1.0, 0.5]

帮手“汇率”系列:

代码语言:javascript
复制
In [111]: d2 = pd.Series(l2, l1)

In [112]: d2
Out[112]:
JPY    5.0
EUR    1.0
CAD    0.5
dtype: float64

解决方案:

代码语言:javascript
复制
In [113]: d1.Col1 *= d1.Col2.map(d2)

In [114]: d1
Out[114]:
   ix  Col1 Col2
0   1  55.0  JPY
1   2  51.0  EUR
2   3  13.5  CAD
票数 0
EN

Stack Overflow用户

发布于 2017-09-14 22:14:37

我不确定我是否完全理解,但似乎您希望将您的Col1乘以某种速率,这对于Col2的不同值是不同的。我建议使用"apply“函数来创建一个名为' rate‘的新列,这是每个Col2行的相应速率。然后,将Col1乘以“速率”是解决办法。这是一些有用的代码。我选择将Col2和rate之间的映射存储在字典中(而您在两个列表中这样做),但想法是相同的。

代码语言:javascript
复制
df=pd.DataFrame([[11.0,'JPY'],[51.0,'EUR'],[27.0,'CAD']],columns=['Col1','Col2'])

mydict = {'JPY':5.0,'EUR':1.0,'CAD':0.5}

def get_rate(symbol):
    return mydict[symbol]

df['rate'] = df['Col2'].apply(get_rate)
df['price_inc'] = df['Col1'] * df['rate']


Out[87]:
Col1    Col2    rate    price_inc
0   11.0    JPY 5.0 55.0
1   51.0    EUR 1.0 51.0
2   27.0    CAD 0.5 13.5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46228705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档