如果我有如下数据框:
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
答案 0 :(得分:2)
您可以将键和值存储在2个不同的dfs中(可能在excel表中),然后使用pd.read_excel(file)
直接从那里读取它
如果我们将它们命名为df
和df1
:
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
它如何工作:
编辑:添加了简单的动态版本
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)
这样,您可以添加许多国家,州等键值对。