首页 > 解决方案 > 从两列返回一个值的函数

问题描述

我有一个数据框df

    Country    Currency 
 1   China       YEN
 2   USA         USD
 3   Russia      USD
 4   Germany     EUR
 5   Nigeria     NGN
 6   Nigeria     USD
 7   China       CNY
 8   USA         EUR 
 9   Nigeria     EUR
10   Sweden      SEK

我想创建一个函数,按列名读取这两列,并返回一个值,该值指示货币是否为当地货币。

结果如下所示:

    Country    Currency    LCY?
 1   China       YEN        0
 2   USA         USD        1
 3   Russia      USD        0
 4   Germany     EUR        1
 5   Nigeria     NGN        1
 6   Nigeria     USD        0
 7   China       CNY        1 
 8   USA         EUR        0
 9   Nigeria     EUR        0
10   Sweden      SEK        1

我试过这个,但没有奏效:

LOCAL_CURRENCY =  {'China':'CNY',
                    'USA':'USD', 
                    'Russia':'RUB',
                    'Germany':'EUR',
                    'Nigeria':'NGN',
                    'Sweden':'SEK'}
def f(x,y):
        if x in LOCAL_CURRENCY and y in LOCAL_CURRENCY:
            return (1)
        else:
            return (0)

有什么想法吗?

标签: python-3.xpandas

解决方案


您可以使用map和比较:

df['LCY'] = df['Country'].map(LOCAL_CURRENCY).eq(df['Currency']).astype(int)

输出:

    Country Currency  LCY
1     China      YEN    0
2       USA      USD    1
3    Russia      USD    0
4   Germany      EUR    1
5   Nigeria      NGN    1
6   Nigeria      USD    0
7     China      CNY    1
8       USA      EUR    0
9   Nigeria      EUR    0
10   Sweden      SEK    1

推荐阅读