Python 基于字典更改数据帧值

Python 基于字典更改数据帧值,python,pandas,dataframe,dictionary,Python,Pandas,Dataframe,Dictionary,是否有任何方法可以使用字典或映射替换值? 我有这样的数据帧: Q14r63: Audi Q14r2: BMW Q14r1: VW Selected Not Selected Not Selected Not Selected Selected Selected Selected

是否有任何方法可以使用字典或映射替换值? 我有这样的数据帧:

Q14r63: Audi                 Q14r2: BMW                 Q14r1: VW 

Selected                     Not Selected               Not Selected
Not Selected                 Selected                   Selected 
Selected                     Selected                   Not Selected 
我还有另一个数据框,它为品牌提供代码。当然,这个df也可以改成字典

Brand           Code
Audi             63
BMW              2
VW               1
如果主df中的“选定”值可以随汽车品牌变化,是否有任何方法可以获得输出

所需输出

Q14r63: Audi               Q14r2: BMW                 Q14r1: VW 

Audi                         NaN                       NaN 
NaN                          BMW                       VW 
Audi                         BMW                       NaN
这里有一种方法使用:

这里有一种方法使用:


首先按列
df1['Brand']
提取带有
regex
的列,然后通过掩码设置值,并通过以下方式设置缺少的值:



使用和
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

首先按列
df1['Brand']
提取带有
regex
的列,然后通过掩码设置值,并通过以下方式设置缺少的值:



使用和
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
试一试

试一试

df1=

df2=

Brand           Code
Audi             63
BMW              2
VW               1
你可以这样做

for column in df1.columns: 
    brand = [x for x in df2['Brand'].values if x in column][0]
    df1[column] = df1[column].replace({'Selected': brand, 'Not Selected': 'NaN'})
df1=

df2=

Brand           Code
Audi             63
BMW              2
VW               1
你可以这样做

for column in df1.columns: 
    brand = [x for x in df2['Brand'].values if x in column][0]
    df1[column] = df1[column].replace({'Selected': brand, 'Not Selected': 'NaN'})

我想使用第二个数据帧,因为我有相当大的列字符串。。。有什么办法吗?如果列名的结构如上所述,使用第二个数据帧只会使这项任务复杂化@这就是问题所在。。我写了一篇专栏文章。。这就是我的专栏的样子
Q14r63:Audi-有时候很难记住所有的内容。你知道以下哪一个汽车品牌,哪怕只是名字?请同时标记您在上一个问题中提到的品牌。
我想使用第二个数据框,因为我有一个相当大的列字符串。。。有什么办法吗?如果列名的结构如上所述,使用第二个数据帧只会使这项任务复杂化@这就是问题所在。。我写了一篇专栏文章。。这就是我的专栏的样子
Q14r63:Audi-有时候很难记住所有的内容。你知道以下哪一个汽车品牌,哪怕只是名字?请同时标记您在上一个问题中提到的品牌。
谢谢。。我试过了,它没有改变任何东西,也没有错误:(@s_khan92-在
品牌
列中没有一些空格?返回什么
打印(v)
?@s_khan92-你的熊猫版本是什么?v工作正常。但m给出的是真值和假值,它只检查是否选中了字符串there@s_khan92-那么什么是
打印(df.stack().unique())
?有选择的值
或不同的值
?谢谢..我试过了,它没有改变任何东西,也没有错误:(@s_khan92-在
品牌
列中没有空格?返回什么
打印(v)
?@s_khan92-您的pandas版本是什么?V运行良好。但m给出的是真值和假值,并且它只检查是否选中了字符串there@s_khan92-那么什么是
打印(df.stack().unique())
?有选择的
值或不同的值?
Q14r63: Audi                 Q14r2: BMW                 Q14r1: VW 

Selected                     Not Selected               Not Selected
Not Selected                 Selected                   Selected 
Selected                     Selected                   Not Selected 
Brand           Code
Audi             63
BMW              2
VW               1
for column in df1.columns: 
    brand = [x for x in df2['Brand'].values if x in column][0]
    df1[column] = df1[column].replace({'Selected': brand, 'Not Selected': 'NaN'})