簡體   English   中英

根據其他列的條件計算1列的值

[英]calculating the value of 1 column based on conditions on other columns

我正在嘗試根據條件計算給定列的值。

基本數據幀如下所示(假設col a和b來自先前的操作,因此是插入操作):

import pandas as pd
import numpy as np

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10]})

df.insert(1, 'calculated', np.nan)

現在,我試圖基於“ a”和“ b”來計算“ calculated”的值。

我嘗試遍歷數據幀行,但“計算”列未得到計算...

for index, row in df.iterrows():
    if row['a']>2:
        row['calculated'] = row['b']*2
    else:
        row['calculated'] = row['b']

繁瑣的結果

  • 使用df.apply似乎df.apply問題,因為我發現所有示例都在使用lambda的地方(如何傳遞a的值並使用lambda將數據返回給計算的?)

我設法用下面的代碼做到了:

df.loc[df['a'] > 2, 'calculated'] = df['b']*2
df.loc[df['a'] <= 2, 'calculated'] = df['b']

但是,此代碼非常“容易出錯”,很難閱讀。

是否有一種“更清潔”的方法來實現這一目標? 一種輕松添加邏輯的方法。

就像是?

def get_calculated_value(row):
  if row['a'] > 2:
    row['calculated'] = row['b'] * 2
  else:
    row['calculated'] = row['a']

df.apply(get_calculated_value())
import pandas as pd
import numpy as np

df=pd.DataFrame({'a':[1,2,3,4,5],'b':[6,7,8,9,10]})

df['calculated'] = df["b"].where(df["b"]>2, df["b"]*2)
display(df)

您可以對lambda使用apply函數。 您無需在函數內分配“計算”列。 同樣,使用apply(),以后可以添加或修改條件。

def myfunc(row):
    if row['a'] > 2:
        return row['b'] * 2
    else:
        return row['a']

df['calculated'] = df.apply(lambda x : myfunc(x), axis=1)

#output
df

    a   b   calculated
0   1   6   1
1   2   7   2
2   3   8   16
3   4   9   18
4   5   10  20

使用np.where有一種更快的方法:

df['calculated']=np.where(df.a>2,2*df.b,df.b)

暫無
暫無

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

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