映射熊猫中的字典值

顶猫

我有一个数据框(df),其中包含以下内容:

 var1
a 1 
a 1 
b 2  
b 3 
c 3 
d 5 

和字典:

dict_cat = {
'x' = ['a', 'b', 'c'],
'y' = 'd' }

我想创建一个新列cat,该根据var1值使用dict键值:

 var1 cat
a 1 x 
a 1 x
b 2 x
b 3 x
c 3 x
d 5 y

我尝试map使用:将变量指定为dict df['cat'] = df['var1'].map(dict_cat),但是由于值在列表内,因此Python无法识别值,而我只能获取NaN值。有一种使用的方法map,还是应该创建一个对行进行迭代的函数,以检查是否var1in字典列表?

谢谢!

耶斯列尔

您需要将交换键的值更改为new dict,然后使用map

print (df)
  var1  var2
0    a     1
1    a     1
2    b     2
3    b     3
4    c     3
5    d     5
dict_cat = {'x' : ['a', 'b', 'c'],'y' : 'd' }

d = {k: oldk for oldk, oldv in dict_cat.items() for k in oldv}
print (d)
{'a': 'x', 'b': 'x', 'c': 'x', 'd': 'y'}

df['cat'] = df['var1'].map(d)
print (df)
  var1  var2 cat
0    a     1   x
1    a     1   x
2    b     2   x
3    b     3   x
4    c     3   x
5    d     5   y

如果第一列是可能的索引,请使用rename或转换index to_series然后使用map

print (df)
   var1
a     1
a     1
b     2
b     3
c     3
d     5

dict_cat = {'x' : ['a', 'b', 'c'],'y' : 'd' }
d = {k: oldk for oldk, oldv in dict_cat.items() for k in oldv}

df['cat'] = df.rename(d).index

要么:

df['cat'] = df.index.to_series().map(d)
print (df)
   var1 cat
a     1   x
a     1   x
b     2   x
b     3   x
c     3   x
d     5   y

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章