簡體   English   中英

Pandas 將滿足大於和小於條件的列的值倍數

[英]Pandas to multiple the value of a column that satisfies greater and less than condition

如何使用 pandas 對滿足大於和小於條件的列的值進行倍增?

df['res'] = ((df['value']<=3) & (df['value']>=1)) * 1.5 *df['value']

df['res'] = ((df['value']<=7) & (df['value']>=4)) * 1.3 *df['value']

以上是我嘗試過的。 但是,我不斷收到消息:

試圖在 DataFrame 的切片副本上設置值。 嘗試改用 .loc[row_indexer,col_indexer] = value"

當我嘗試超過 2 個條件時,“res”變為 0。

以下是我希望實現的目標:

value    res
2        3
6        7.8

您混淆了兩種對象:掩碼,即 boolean 系列,以及 dataframe 的原始列,即具有數值的系列。
這應該可以解決問題:

mask1 = (df['value']<=3) & (df['value']>=1)
mask2 = (df['value']<=7) & (df['value']>=4)
df.loc[mask1, 'res'] = df['value'] * 1.5
df.loc[mask2, 'res'] = df['value'] * 1.3
print(df)
   value  res
0      2  3.0
2      6  7.8

您可以使用以下方法獲得范圍:

df['res'] = df['value'].between(1, 3, inclusive=True)

這里 inclusive 決定是否應包括端點。

我建議使用.between方法來創建這樣的掩碼,即:

df.loc[df['value'].between(1,3), 'res'] = df[ df['value'].between(1,3), 'value'] * 1.5
df.loc[df['value'].between(4,7), 'res'] = df[ df['value'].between(4,7), 'value'] * 1.3

或者,您也可以使用np.where function,它充當 if-else:

df['res'] = np.where(df['value'].between(1,3), 
                     df['value'] * 1.5,
                     np.where(df['value'].between(4,7),
                              df['value'] * 1.3,
                              df['value']))   

暫無
暫無

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

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