根据条件从两个数据框中提取值

亚当

我有两个数据框:

df1 = pd.DataFrame({'player': ['AB','AB','AB'], 'contract_length':[2,3,1], 'year': [1998,2000,2003]})
df2 = pd.DataFrame({'player': ['AB','AB','AB','AB','AB','AB'], 'year':[1998,1999,2000,2001,2002,2003],'player_value': [4,3,7,10,9,2]})

df1
  player    contract_length     year
0   AB            2             1998
1   AB            3             2000
2   AB            1             2003

df2
    player  year    player_value
0   AB      1998    4
1   AB      1999    3
2   AB      2000    7
3   AB      2001    10
4   AB      2002    9
5   AB      2003    2

第一个数据框列出了玩家已签订的合同。例如:1998年,他签订了为期2年的合同。

第二个数据框列出了各个季节以及我为每个季节设置的值。

我正在尝试在df1上添加新列,以根据合同年和合同期限将df2的玩家总值相加。例如,df1的第一行是1998年和2年。因此,该值将是7,来自1998年和1999年(2年合同)的球员值4和3。

我似乎无法弄清楚为什么它没有返回正确的结果:

for i,row in df1.iterrows():
    year_list = list(range(row['year'],((row['year'])+(row['contract_length']))))
    player = row['player']
    df = pd.DataFrame(columns=['player_value'])
    for year in year_list:
        player_value = df2.loc[(df2['player']==player) & (df2['year'] == year),['player_value']]
        df1['contract_value'] = sum(df['player_value'])

返回:

player  contract_length year    contract_value
0   AB     2            1998    0
1   AB     3            2000    0
2   AB     1            2003    0

什么时候应该是:

player  contract_length year    contract_value
0   AB     2            1998    7
1   AB     3            2000    26
2   AB     1            2003    2

没有返回错误。只是最后一列中的零。

Zaraki Kenpachi

用合同期限每年取一部分,然后求和palyer_value

import pandas as pd

df1 = pd.DataFrame({'player': ['AB','AB','AB'], 'contract_length':[2,3,1], 'year': [1998,2000,2003]})
df2 = pd.DataFrame({'player': ['AB','AB','AB','AB','AB','AB'], 'year':[1998,1999,2000,2001,2002,2003],'player_value': [4,3,7,10,9,2]})

data = []
for index, row in df1.iterrows():
    contract_data = df2[(df2['year'] >= row['year']) & (df2['year'] <= row['year']+row['contract_length']-1)]
    sum = contract_data['player_value'].sum()
    data.append(sum)

df1['contract_value'] = data

输出:

  player  contract_length  year  contract_value
0     AB                2  1998               7
1     AB                3  2000              26
2     AB                1  2003               2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据两个列中值的组合从数据框中提取行

Python数据框:根据条件合并两个数据框(熊猫)

Python Pandas根据最小索引从数据框中提取值

根据列的条件从单个数据框中提取几个不同的数据框

根据条件合并两个数据框

根据应用于两个数据框的条件创建第三个数据框

根据两个条件从熊猫数据框中提取值

从两个2D列表中提取值并将其存储到熊猫数据框中

基于同一ID列从两个数据帧中提取值

根据来自两个数据框和多个条件的条件创建一对

根据条件更新两个数据框列

从两个数据集中提取相关时间

Pandas-根据某些键值从数据框中提取值

使用purrr根据条件从嵌套数据框中提取值

根据多个条件连接两个数据框

根据条件合并熊猫中的两个数据框

如何根据不同的条件合并或合并两个数据框?

如何从两个矩阵数据框中提取值

根据日期从数据框中提取值

在 Python 中以交替方式从两个数据框列中提取值

从数据框中提取值

从 spark 数据框中的列中提取值并提取到两个新列

使用 openpyxl 从两个不同的 excel 文件中提取值并使用 Python 创建一个新的数据框

根据另一列中的条件从 Pandas 数据框中提取值

合并两个数据框:专门根据两个条件合并选定的列?

比较两个数据框并根据某些条件创建新的数据框

根据条件合并两个数据框

如何根据多个条件和 id 合并两个数据框

熊猫:根据两个条件匹配加入两个数据框