首页 > 解决方案 > 将列中的值匹配的不同行中的 1 个值相加

问题描述

我目前有 2 个数据集。第一个包含我计算出的具有价值观的足球队列表。 在此处输入图像描述

我有第二个数据集,其中包含今天正在比赛的球队列表

在此处输入图像描述

我想做的是将两支球队的平均人数添加到数据集2,所以结果将是

在此处输入图像描述

我查看了 Stack Overflow 并没有找到任何可以提供帮助的东西。我对使用 Pandas 很陌生,所以我不确定这是否可能。

作为示例数据集:

data1 = {
         'DATAMECI': ['17/06/2020', '17/06/2020'],
         'ORAMECI': ['11:30', '15:30'],
         'TXTECHIPA1': ['Everton', 'Man City'],
    'TXTECHIPA2': ['Hull', 'Leeds'],
    }
data2 = {
         'Team': ['Hull', 'Leeds','Everton', 'Man City'],
         'Home0-0': ['80', '78','80', '66'],
         'Home1-0': ['81', '100','90', '70'],
    'Away0-1': ['88', '42','75', '69'],
    }

期望的输出是

Desired = {
    'DATAMECI': ['17/06/2020', '17/06/2020'],
         'ORAMECI': ['11:30', '15:30'],
         'TXTECHIPA1': ['Everton', 'Man City'],
    'TXTECHIPA2': ['Hull', 'Leeds'],
             'Home0-0': ['80', '72'],
         'Home1-0': ['86', '85'],
    'Away0-1': ['86', '56',],
    }

标签: pythonpandas

解决方案


与迭代行相反的另一个选项是您可以合并数据集,然后迭代列。

我还注意到你想要的输出是四舍五入的,所以我也有

样本:

data1 = pd.DataFrame({
         'DATAMECI': ['17/06/2020', '17/06/2020'],
         'ORAMECI': ['11:30', '15:30'],
         'TXTECHIPA1': ['Everton', 'Man City'],
    'TXTECHIPA2': ['Hull', 'Leeds'],
    })
data2 = pd.DataFrame({
         'Team': ['Hull', 'Leeds','Everton', 'Man City'],
         'Home0-0': ['80', '78','80', '66'],
         'Home1-0': ['81', '100','90', '70'],
    'Away0-1': ['88', '42','75', '69'],
    })





Desired = pd.DataFrame({
    'DATAMECI': ['17/06/2020', '17/06/2020'],
         'ORAMECI': ['11:30', '15:30'],
         'TXTECHIPA1': ['Everton', 'Man City'],
    'TXTECHIPA2': ['Hull', 'Leeds'],
             'Home0-0': ['80', '72'],
         'Home1-0': ['86', '85'],
    'Away0-1': ['86', '56',],
    })

代码:

import pandas as pd

cols = [ x for x in data2 if 'Home' in x or 'Away' in x ]
data1 = data1.merge(data2.rename(columns={'Team':'TXTECHIPA1'}), how='left', on=['TXTECHIPA1'])
data1 = data1.merge(data2.rename(columns={'Team':'TXTECHIPA2'}), how='left', on=['TXTECHIPA2'])

for col in cols:
    data1[col] = data1[[col + '_x', col + '_y']].astype(int).mean(axis=1).round(0)
    data1 = data1.drop([col + '_x', col + '_y'], axis=1)

输出:

print(data1)
     DATAMECI ORAMECI TXTECHIPA1 TXTECHIPA2  Home0-0  Home1-0  Away0-1
0  17/06/2020   11:30    Everton       Hull     80.0     86.0     82.0
1  17/06/2020   15:30   Man City      Leeds     72.0     85.0     56.0

推荐阅读