[英]Pandas: More efficient way to update a column in pandas dataframe without a for loop
[英]Efficient way to update column value for subset of rows on Pandas DataFrame?
使用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.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)
這可能是您需要的:
df.loc[df.name.str.len() == 4, 'value'] *= 1000
df.loc[df.name.str.len() == 4, 'value'] = 'short_' + df['value'].astype(str)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.