簡體   English   中英

根據數據幀切片的條件更改值

[英]Change value based on condition on slice of dataframe

我有一個這樣的數據框:

df = pd.DataFrame(columns=['Dog', 'Small', 'Adult'])
df.Dog = ['Poodle', 'Shepard', 'Bird dog','St.Bernard']
df.Small = [1,1,0,0]
df.Adult = 0

看起來像這樣:

       Dog         Small   Adult
0      Poodle          1   0
1      Shepard         1   0
2      Bird dog        0   0
3      St.Bernard      0   0

然后我想根據另一列更改一列。 我可以這樣做:

df.loc[df.Small == 0, 'Adult'] = 1

但是,我只想對前 3 行這樣做。

我可以選擇前三行:

df.iloc[0:2]

但是,如果我嘗試更改前三行的值:

df.iloc[0:2, df.Small == 0, 'Adult'] = 1

我得到一個錯誤。

如果將兩者合並,我也會收到錯誤消息:

df.iloc[0:2].loc[df.Small == 0, 'Adult'] = 1

它告訴我我正在嘗試在切片的副本上設置一個值。

我應該如何正確執行此操作?

您可以在.loc選擇中包括該范圍作為另一個條件(對於一般情況,我將明確包括 0):

df.loc[(df.Small == 0) & (0 <= df.index) & (df.index <= 2), 'Adult'] = 1

另一種選擇是將索引轉換為系列以使用pd.Series.between

df.loc[(df.Small == 0) & (df.index.to_series().between(0, 2)), 'Adult'] = 1

只有當索引已經排序時,基於索引添加條件才有效。 或者,您可以執行以下操作:

ind = df[df.Small == 0].index[:2]
df.loc[ind, 'Adult'] = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM