如何根据另一列中的值进行条件替换列中的值?

时间:2019-11-27 05:38:43

标签: python pandas dataframe data-science

我有如下数据:

currency    country
GBP         GB
USD         NaN
USD         US
AUD         AUD
GBP         NaN

基本上,我正在尝试在“国家/地区”列中有条件地替换NaN,使其值取决于该行中的货币是什么。 (例如,对于GBP,它应该是GB)。

我有一个单独的字典,将货币映射到国家。但是我不确定如何替换“国家/地区”列中的值

2 个答案:

答案 0 :(得分:2)

假设您有字典d,则可以使用set_indexfillnareset_index

d = {'GBP': 'GB', 'USD': 'US', 'AUD': 'AUD'}

df = df.set_index('currency').country.fillna(d).reset_index()

Out[39]:
  currency country
0      GBP      GB
1      USD      US
2      USD      US
3      AUD     AUD
4      GBP      GB

答案 1 :(得分:1)

将{{1}的Series.fillnaSeries.map一起使用,如果dict中有更多列,则解决方案也可以使用:

DataFrame

编辑:

如果#one possible solution is generate dictionary from existing values d = df.dropna().set_index('currency')['country'].to_dict() #or use dictionary #d = {'GBP': 'GB', 'USD': 'US', 'AUD': 'AUD'} df['country'] = df['country'].fillna(df['currency'].map(d)) print (df) currency country 0 GBP GB 1 USD US 2 USD US 3 AUD AUD 4 GBP GB 的所有值都在字典中,则应简化解决方案:

currency

如果没有,那么如果仅使用d = {'GBP': 'GB', 'USD': 'US', 'AUD': 'AUD'} df['country'] = df['currency'].map(d) print (df) currency country 0 GBP GB 1 USD US 2 USD US 3 AUD AUD 4 GBP GB ,它将仅替换匹配的值:

map

因此,如果需要不在dict中的原始值(此处为GBP1)没有替换为print (df) currency country 0 GBP1 GB1 1 USD NaN 2 USD US 3 AUD AUD 4 GBP NaN d = {'GBP': 'GB', 'USD': 'US', 'AUD': 'AUD'} df['country'] = df['currency'].map(d) print (df) currency country 0 GBP1 NaN 1 USD US 2 USD US 3 AUD AUD 4 GBP GB ,请使用第一种解决方案:

NaN