[英]Apply an operation on the value of column B depending on the value of column A - Pandas
我有以下數據集:
id Wages PayFreq
0 1013 Weekly
1 5000 Monthly
2 892 Weekly
3 2320 Bi-Weekly
4 1068 Weekly
我打算執行以下操作:
if PayFreq == 'Monthly':
(Wages / 4) * 52
elif PayFreq == 'Bi-Weekly':
(Wages / 2) * 52
else:
Wages * 52
我需要 select 根據 PayFreq 列中存在的內容將操作應用於工資列。 有任何想法嗎?
按字典使用Series.map
,對於不匹配的值,請使用Series.fillna
,因為 map 返回NaN
和按Wages
列的倍數:
d = {'Monthly': 52/4, 'Bi-Weekly': 52/2}
df['YearWages'] = df['PayFreq'].map(d).fillna(52).mul(df['Wages'])
print (df)
id Wages PayFreq YearWages
0 0 1013 Weekly 52676.0
1 1 5000 Monthly 65000.0
2 2 892 Weekly 46384.0
3 3 2320 Bi-Weekly 60320.0
4 4 1068 Weekly 55536.0
將掩碼傳遞給numpy.select
的解決方案:
df['NewWages'] = np.select([df['PayFreq'] == 'Weekly',
df['PayFreq']== ' Monthly'],
[(df['Wages'] / 2)*52,
(df['Wages'] / 4) * 52], default=df['Wages']*52)
print (df)
id Wages PayFreq NewWages
0 0 1013 Weekly 26338.0
1 1 5000 Monthly 260000.0
2 2 892 Weekly 23192.0
3 3 2320 Bi-Weekly 120640.0
4 4 1068 Weekly 27768.0
或者您可以使用np.where
並相應地調整條件,將以下僅用作示例而不是完整答案:
import numpy as np
df['NewWages'] = np.where(df['PayFreq'] == 'Weekly', (df['Wages'] / 2)*52,
np.where(df['PayFreq']== ' Monthly', (df['Wages'] / 4) * 52, df['Wages']*52))
打印:
id Wages PayFreq NewWages
0 0 1013 Weekly 26338.0
1 1 5000 Monthly 260000.0
2 2 892 Weekly 23192.0
3 3 2320 Bi-Weekly 120640.0
4 4 1068 Weekly 27768.0
我建議使用 Dataframe 的apply ,因為它非常簡單直觀。
您可以定義要在 dataframe 上應用的方法,您可以為此選擇 Lambda 表達式或顯式 function。 例如,下面是一個簡單的實現,使用 function:
def func(row):
if row['PayFreq'] == 'Monthly':
return (row['Wages'] / 4) * 52
elif row['PayFreq'] == 'Bi-Weekly':
return (row['Wages'] / 2) * 52
else:
return row['Wages'] * 52
為了將其應用於您的 dataframe(在右軸上):
df['NewWages'] = df.apply(func, axis=1)
結果:
Wages PayFreq NewWages
0 1013 Weekly 52676.0
1 5000 Monthly 65000.0
2 892 Weekly 46384.0
3 2320 Bi-Weekly 60320.0
4 1068 Weekly 55536.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.