我有一个数据框(df),其中包含以下内容:
var1
a 1
a 1
b 2
b 3
c 3
d 5
Run Code Online (Sandbox Code Playgroud)
和字典:
dict_cat = {
'x' = ['a', 'b', 'c'],
'y' = 'd' }
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列cat,该列根据var1值使用dict键值:
var1 cat
a 1 x
a 1 x
b 2 x
b 3 x
c 3 x
d 5 y
Run Code Online (Sandbox Code Playgroud)
我尝试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
Run Code Online (Sandbox Code Playgroud)
如果第一列是可能的索引,请使用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
Run Code Online (Sandbox Code Playgroud)
要么:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2229 次 |
| 最近记录: |