【发布时间】:2018-10-04 18:13:44
【问题描述】:
当使用 Pandas 更新特定行子集的列值时,最好的方法是什么?
简单示例:
import pandas as pd
df = pd.DataFrame({'name' : pd.Series(['Alex', 'John', 'Christopher', 'Dwayne']),
'value' : pd.Series([1., 2., 3., 4.])})
目标:根据名称长度和值列本身的初始值更新value列。
以下行实现了目标:
df.value[df.name.str.len() == 4 ] = df.value[df.name.str.len() == 4] * 1000
但是,此行在 LHS 和 RHS 中对整个数据框进行了两次过滤。我认为这不是最有效的方法。它并没有“就地”做到这一点。
基本上我正在寻找相当于 R data.table ':=' 运算符的熊猫:
df[nchar(name) == 4, value := value*1000]
对于其他类型的操作,例如:
df[nchar(name) == 4, value := paste0("short_", as.character(value))]
环境:Python 3.6Pandas 0.22
提前致谢。
【问题讨论】: