[英]pandas: create column with string value based on conditions in other columns
[英]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.