根据字典更改 pandas 数据框值 [英] Changing pandas dataframe values based on dictionary
本文介绍了根据字典更改 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屋!
查看全文