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'})