假设我有以下Pandas数据帧,其中'key'列只包含唯一的字符串:

import pandas as pd
df = pd.DataFrame({'key':['b','d','c','a','e','f'], 'value': [0,0,0,0,0,0]})
df

  key value
0   b     0
1   d     0
2   c     0
3   a     0
4   e     0
5   f     0

现在我有了一个唯一键列表和一个相应值列表:

keys = ['a', 'b', 'c', 'd']
values = [1, 2, 3, 4]

我想以列表的相同顺序更新'value'列,这样每一行都匹配'key''value'(a1'b'2'c'3'd'4).我使用的是以下代码,但DataFrame似乎从上到下更新值,我不太理解这一点

df.loc[df['key'].isin(keys),'value'] = values
df

  key value
0   b     1
1   d     2
2   c     3
3   a     4
4   e     0
5   f     0

澄清一下,我希望能得到

  key value
0   b     2
1   d     4
2   c     3
3   a     1
4   e     0
5   f     0

有什么建议吗?

推荐答案

使用map:

dd = dict(zip(keys, values))
df['value'] = df['key'].map(dd).fillna(df['value'])

Python相关问答推荐

未删除映射表的行

将两只Pandas rame乘以指数

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

pyscript中的压痕问题

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

如何从数据库上传数据到html?

Django RawSQL注释字段

为什么if2/if3会提供两种不同的输出?

如何创建引用列表并分配值的Systemrame列

Polars Group by描述扩展

为什么t sns.barplot图例不显示所有值?'

一个telegram 机器人应该发送一个测验如何做?""

Python:从目录内的文件导入目录

查找查找表中存在的列值组合

是否需要依赖反转来确保呼叫方和被呼叫方之间的分离?

如何删除剪裁圆的对角线的外部部分

关于数字S种子序列内部工作原理的困惑

有什么方法可以在不对多索引DataFrame的列进行排序的情况下避免词法排序警告吗?

是否从Python调用SHGetKnownFolderPath?