当使用 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/