我在数据框中的列包含列表中值的索引。喜欢:
id | idx
A | 0
B | 0
C | 2
D | 1
list = ['a', 'b', 'c', 'd']
我想用对应索引列表中的值替换idx列中大于0的每个值,以便:
id | idx
A | 0
B | 0
C | c # list[2]
D | b # list[1]
我试图用循环来做到这一点,但是它什么都不做...尽管如果我移动['idx'],它将替换该行上的所有值
for index in df.idx.values:
if index >=1:
df[df.idx==index]['idx'] = list[index]
不要像变量名那样使用list
,因为builtin
(Python代码字)。
然后使用:
L = ['a', 'b', 'c', 'd']
df['idx'] = df['idx'].mask(df['idx'] >=1, df['idx'].map(dict(enumerate(L))))
print (df)
id idx
0 A 0
1 B 0
2 C c
3 D b
为索引大于0的项创建字典,然后将其与replace一起使用以获取输出:
mapping = dict((key,val) for key,val in enumerate(l) if key > 0)
print(mapping)
{1: 'b', 2: 'c', 3: 'd'}
df.replace(mapping)
id idx
0 A 0
1 B 0
2 C c
3 D b
注意:我将list
变量名称更改为l