我有一个数据框(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
,还是应该创建一个对行进行迭代的函数,以检查是否var1
有in
字典列表?
谢谢!
您需要将交换键的值更改为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] 删除。
我来说两句