[英]Pandas Applying multiple greater than and less than grouping rows by specific column
[英]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.