gpt4 book ai didi

python - 在Python中,使用其他变量的过去创建一个新列

转载 作者:行者123 更新时间:2023-12-01 00:31:33 24 4
gpt4 key购买 nike

我有一个关于某项体育比赛的 pandas 数据框。我有 6 支队伍:A、B、C、D、E 和 F。比赛有 38 周。在每支弱队中,我们都有一支主场球队对阵客队。我知道球队比赛的数量与38周不符,但这只是为了说明问题。我的 df 是这样的:

df
ownerh_team visit_team some_var weak some_var2 score
A B 1 1 5 3
C D 2 1 3 3
E F 1 1 1 1

A D 4 38 2 0
B D 2 38 3 0
F E 1 38 1 1

分数变量与所有者主队(ownerh_team)相关。如果主队获胜,则得分为 3。如果客队获胜,则得分为 0。如果比赛结果平局,则得分为 1。

我想构造一个函数 new_var_func 来创建一个与过去的弱点相关的新列。换句话说,对于 df 的每一行(或相当于每个主队)及其各自的一周,我想知道主队在过去 5 周内有多少次得分为 3。

我想要一个具有以下输入结构的函数:

def new_var_func(data = df, column = 'name_var' , n_past_weeks = 1 , score_value = 3):
corpus

请注意,此函数的输出与 df 相同,但有一个名为“name_var”的新列。参数 n_past_weeks = y 是要调查的过去几周的数量。 Score_value = x 表示我想知道过去 y 周主队有多少次得分 = x。

也许按照解释创建新方式变量的解决方案不一定必须使用函数。我接受其他解决方案,但如果您可以使用函数,我将不胜感激。

最佳答案

给定以下数据框:

df = pd.DataFrame([
['A','B',1,1,5,3],
['C','D',2,1,3,3],
['E','F',1,1,1,1],
['A','D',4,2,2,3],
['B','D',2,2,3,3],
['F','E',1,2,1,1],
['A','D',4,3,2,3],
['B','D',2,3,3,0],
['F','E',1,3,1,1]],
columns=['ownerh_team','visit_team','some_var','week','some_var2','score'])

ownerh_team visit_team some_var week some_var2 score
0 A B 1 1 5 3
1 C D 2 1 3 3
2 E F 1 1 1 1
3 A D 4 2 2 3
4 B D 2 2 3 3
5 F E 1 2 1 1
6 A D 4 3 2 3
7 B D 2 3 3 0
8 F E 1 3 1 1

我用了pandas.Dataframe.query过滤数据框,和 pandas.Dataframe.apply函数来有效地迭代它。试试这个代码:

def new_var_func(data=df, column='name_var', n_past_weeks=1, score_value= 3):
df[column] = df.apply(lambda row: len(df[(df.ownerh_team == row.ownerh_team) &
(df.score == score_value) &
(df.week >= row.week - n_past_weeks) &
(df.week <= row.week)]), axis=1)
return df



df = new_var_func(data=df, column='name_var', n_past_weeks=1, score_value=3)

并给出:

  ownerh_team visit_team  some_var  week  some_var2  score  name_var
0 A B 1 1 5 3 1
1 C D 2 1 3 3 1
2 E F 1 1 1 1 0
3 A D 4 2 2 3 2
4 B D 2 2 3 3 1
5 F E 1 2 1 1 0
6 A D 4 3 2 3 2
7 B D 2 3 3 0 1
8 F E 1 3 1 1 0

注意:我认为您还想计算本周的结果,如果您想从计数中排除您运行的那一周,请替换 df.week <= row.weekdf.week < row.week ,或者如果我误解了您请求的某些部分,请修改查询

关于python - 在Python中,使用其他变量的过去创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58139462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com