使用 apply() 基于函数创建两列
Posted
技术标签:
【中文标题】使用 apply() 基于函数创建两列【英文标题】:create two columns based on a function with apply() 【发布时间】:2020-07-28 19:54:20 【问题描述】:我有一个包含英超联赛足球数据的数据集:
HomeTeam AwayTeam FTHG FTAG
0 Liverpool Norwich 4 1
1 West Ham Man City 0 5
2 Bournemouth Sheffield United 1 1
3 Burnley Southampton 3 0
... ... ... ... ...
其中“FTHG”和“FTAG”分别是主队的全职进球和客队的进球。 我需要编写一个函数,根据结果(以数据框的形式)计算最终的英超联赛表。我写的是这个函数:
def calcScore(row):
if PL_df.iloc[row]['FTHG'] > PL_df.iloc[row]['FTAG']:
x = 3
y = 0
elif PL_df.iloc[row]['FTHG'] < PL_df.iloc[row]['FTAG']:
x = 0
y = 3
elif PL_df.iloc[row]['FTHG'] == PL_df.iloc[row]['FTAG']:
x = 1
y = 1
return x,y
这有效,例如第一行它给出这个输出:
in[1]: calcScore(0)
out[1]: (3,0)
现在我需要使用 apply() 创建两列 HP 和 AP,分别包含主队和客队获得的积分数。但我想不出办法。
我希望我已经足够清楚了。提前谢谢你。
【问题讨论】:
【参考方案1】:不需要函数(也比apply
更快):
win_or_draws = df['FTHG'] > df['FTAG'], df['FTHG'] == df['FTAG']
df['HP'] = np.select( win_or_draws, (3,1), 0)
df['AP'] = np.select(win_or_draws, (0,1),3)
输出:
HomeTeam AwayTeam FTHG FTAG HP AP
0 Liverpool Norwich 4 1 3 0
1 West Ham Man City 0 5 0 3
2 Bournemouth Sheffield United 1 1 1 1
3 Burnley Southampton 3 0 3 0
【讨论】:
以上是关于使用 apply() 基于函数创建两列的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用apply函数基于条件(if condition)生成新的数据列
pandas编写自定义函数使用apply函数应用自定义函数基于Series数据生成新的dataframe
基于其他两列并使用 LAG 函数更新 Oracle 过程中的列
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用apply函数计算每个分组指定数值变量最小值所在的数据行(编写自定义函数其中使用nsmallest)
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用apply函数计算每个分组指定数值变量最大值所在的数据行(编写自定义函数其中使用nlargest)