在熊猫中的多个if条件下替换字符串

时间:2018-09-26 09:36:18

标签: python pandas

如果我有如下数据框:

import pandas as pd
df = pd.DataFrame({
        'items': ['countryName', 'stateName', 'currencyName', 'companyName'],
        'code': ['NK', 'NK', 'NK', 'NK']
     })
print(df)

          items code
0   countryName   NK
1     stateName   NK
2  currencyName   NK
3   companyName   NK

如何在几种条件下转换NK,例如,如果其项为“ countryName”,则将NK更改为朝鲜,如果其项为“ stateName”,则将NK更改为“ North Kingstown”,依此类推。请注意,这只是数据框的一部分。谢谢。

df = pd.DataFrame({
        'items': ['countryName', 'stateName', 'currencyName', 'companyName'],
        'code': ['North Korea', 'North Kingstown', 'Norwegian krone', 'Northrup-King']
     })
print(df)
          items             code
0   countryName      North Korea
1     stateName  North Kingstown
2  currencyName  Norwegian krone
3   companyName    Northrup-King

3 个答案:

答案 0 :(得分:2)

您可以将键和值存储在2个不同的dfs中(可能在excel表中),然后使用pd.read_excel(file)直接从那里读取它

如果我们将它们命名为dfdf1

df:

     code            items
0    NK              countryName 
1    NK              stateName 
2    NK              currencyName 
3    NK              companyName 

df1:

     code               items
0    North Korea      countryName 
1    North Kingstown  stateName 
2    Norwegian krone  currencyName 
3    Northrup-King    companyName 

然后:

df = df.merge(df1,on='items').drop('code_x',axis=1)
df.columns=['items','code']

这会节省很多代码行。.

答案 1 :(得分:1)

您可以在DF上使用np.where。它有点脏,我敢肯定其他人可以为您提供更清洁的解决方案,但它可以工作。

sizeof

它如何工作:

  • np.where((条件一)&(条件二)&(更多条件)...
  • 如果满足条件,则为列“代码”设置
  • 值,例如朝鲜
  • 如果不满足条件,则保留旧值(NK)

编辑:添加了简单的动态版本

df['code'] = np.where((df['code'] == 'NK') & (df['items'] == 'countryName'),
                      'North Korea',
                       df['code'])

df['code'] = np.where((df['code'] == 'NK') & (df['items'] == 'stateName'),
                      'North Kingstown',
                       df['code'])
... add the rest of the examples

答案 2 :(得分:1)

我会这样做:

df = pd.DataFrame({
        'items': ['countryName', 'stateName', 'currencyName', 'companyName'],
        'code': ['NK', 'NK', 'NK', 'NK']
     })

country_value = {'NK': "North Korea"}
state_value = {'NK': 'North Kingstown'}
currency_value = {'NK' : 'Norwegian Krone'}
company_value = {'NK': 'Northrup-king'}

def pair(x):
    if x['items'] == 'countryName':
        x['code'] = country_value[x['code']]
    elif x['items'] == 'stateName':
        x['code'] = state_value[x['code']]
    elif x['items'] == 'currencyName':
        x['code'] = currency_value[x['code']]
    elif x['items'] == 'companyName':
        x['code'] = company_value[x['code']]

    return x


df.apply(pair, axis = 1)

这样,您可以添加许多国家,州等键值对。