根据字典更改 pandas 数据框值 [英] Changing pandas dataframe values based on dictionary

查看:37
本文介绍了根据字典更改 pandas 数据框值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有什么方法可以使用字典或映射替换值?我有这样的数据框:

Is there any way to replace value using dictionary or mapping? I have dataframe like this:

Q14r63: Audi                 Q14r2: BMW                 Q14r1: VW 

Selected                     Not Selected               Not Selected
Not Selected                 Selected                   Selected 
Selected                     Selected                   Not Selected 

,我还有另一个数据框,为品牌提供了代码.当然,该df也可以更改为字典.

and i have another dataframe which provides codes for the Brands. This df ofcourse can be changed into dictionary also.

Brand           Code
Audi             63
BMW              2
VW               1

是否可以通过汽车品牌更改主df中选定"值的输出?

Is there any way to get output where "selected" values in main df can be be changes with car brand?

所需的输出

Q14r63: Audi               Q14r2: BMW                 Q14r1: VW 

Audi                         NaN                       NaN 
NaN                          BMW                       VW 
Audi                         BMW                       NaN

推荐答案

首先使用 regex 列按 df1 ['Brand'] 列进行提取,然后按掩码设置值与 DataFrame.mask DataFrame.where :

First extract by column df1['Brand'] columns with regex and then set values by mask with DataFrame.mask and missing values by DataFrame.where:

v = df.columns.str.extract('(' + '|'.join(df1['Brand']) + ')', expand=False)
print (v)
Index(['Audi', 'BMW', 'VW'], dtype='object')


m = df.eq('Selected')
print (m)
   Q14r63: Audi  Q14r2: BMW  Q14r1: VW
0          True       False      False
1         False        True       True
2          True        True      False


df = df.mask(m, v[None, :]).where(m)
print (df)
  Q14r63: Audi Q14r2: BMW Q14r1: VW
0         Audi        NaN       NaN
1          NaN        BMW        VW
2         Audi        BMW       NaN

使用 numpy.where DataFrame 构造函数:

df = pd.DataFrame(np.where(m, v, np.nan), index=df.index, columns=df.columns)
print (df)
  Q14r63: Audi Q14r2: BMW Q14r1: VW
0         Audi        NaN       NaN
1          NaN        BMW        VW
2         Audi        BMW       NaN

这篇关于根据字典更改 pandas 数据框值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆