python - 更新 Pandas DataFrame 上行子集的列值的有效方法?

标签 python pandas

当使用 Pandas 更新特定行子集的列值时,最好的方法是什么?

简单的例子:

import pandas as pd

df = pd.DataFrame({'name' : pd.Series(['Alex', 'John', 'Christopher', 'Dwayne']),
                   'value' : pd.Series([1., 2., 3., 4.])})

目标:根据名称长度和 value 列本身的初始值更新 value 列。

下面一行实现了目标:

df.value[df.name.str.len() == 4 ] = df.value[df.name.str.len() == 4] * 1000

但是,这条线对整个数据帧进行了两次过滤,包括左轴和右轴。我认为这不是最有效的方法。而且它不会“就地”进行。

基本上我正在寻找等同于 R data.table ':=' 运算符的 Pandas :

df[nchar(name) == 4, value := value*1000]

对于其他类型的操作,例如:

df[nchar(name) == 4, value := paste0("short_", as.character(value))]

环境:Python 3.6 Pandas 0.22

提前致谢。

最佳答案

你需要loc *=:

df.loc[df.name.str.len() == 4, 'value'] *= 1000
print (df)
          name   value
0         Alex  1000.0
1         John  2000.0
2  Christopher     3.0
3       Dwayne     4.0

编辑:

更通用的解决方案:

mask = df.name.str.len() == 4
df.loc[mask, 'value'] = df.loc[mask, 'value'] * 1000

或者:

df.update(df.loc[mask, 'value'] * 1000)

关于python - 更新 Pandas DataFrame 上行子集的列值的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766232/

相关文章:

python - 可视化修改后的 SIR 模型

python - Pandas 根据 bool 条件选择行和列

python - 如何在日期间隔内添加缺失的日期?

python - 将 pandas 数据框转换为篮子类型橙色表

python - 将 WTForms 字段的值设置为 elements css 样式

python - 如何创建动态图以在 Flask 上显示?

带有@语法的python装饰器参数

python - 排序数据框并按单词搜索

Python Pandas - 按空行拆分 Excel 电子表格

python数组: averaging slope and intercept of datasets