在python中,使用其他variab的过去创建一个新列

2024-06-16 10:56:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于某项运动比赛的数据框架。我有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

得分变量与业主主队(业主球队)有关。如果主队获胜,那么比分是3分。如果访问团队获胜,则得分为0。如果比赛结果是平局,比分是1分。你知道吗

我想构造一个函数new\u var\u func来创建一个新的列来关联过去的weaks。换言之,对于每一排df(或者相当于每一个主场球队)和它各自的一周,我想知道在过去的5周里主场球队得了3分的次数。你知道吗

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

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

注意,这个函数的输出是相同的df,但是有一个新列名为'name\u var'。参数n\u pass\u weeks=y是要调查的过去周数。分数=x意味着我想知道在过去的y周里主队有多少次得分=x。你知道吗

也许创建新的方法变量的解决方案不一定要使用函数。我接受其他解决方案,但如果您能使用函数,我将不胜感激。你知道吗


Tags: 函数namedfnewvarsome团队次数
1条回答
网友
1楼 · 发布于 2024-06-16 10:56:52

给定以下数据帧:

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.week替换为df.week < row.week,或者如果我误解了您请求的某些部分,请修改查询

相关问题 更多 >