gpt4 book ai didi

python - groupby 并对两列求和并在 pandas 中设置为一列

转载 作者:行者123 更新时间:2023-12-01 01:48:16 25 4
gpt4 key购买 nike

我有以下数据框:

import pandas as pd
data = pd.DataFrame()
data['Home'] = ['A','B','C','D','E','F']
data['HomePoint'] = [3,0,1,1,3,3]
data['Away'] = ['B','C','A','E','D','D']
data['AwayPoint'] = [0,3,1,1,0,0]

我想按列 ['Home', 'Away'] 进行分组,并将名称更改为 Team。然后我喜欢将家乡点和离开点作为名称求和。

     Team      Points
A 4
B 0
C 4
D 1
E 4
F 3

我该怎么做?我正在尝试使用以下帖子的不同方法: Link

但是我无法获得我想要的格式。

非常感谢您的建议。

谢谢

泽普。

最佳答案

一个简单的方法是创建两个由团队索引的新系列:

home = pd.Series(data.HomePoint.values, data.Home)
away = pd.Series(data.AwayPoint.values, data.Away)

那么,你想要的结果是:

home.add(away, fill_value=0).astype(int)

请注意,home +away 不起作用,因为 F 队从未参加过客场比赛,因此他们的结果为 NaN。因此,我们将 Series.add()fill_value=0 一起使用。

一种复杂的方法是使用DataFrame.melt():

goo = data.melt(['HomePoint', 'AwayPoint'], var_name='At', value_name='Team')
goo.HomePoint.where(goo.At == 'Home', goo.AwayPoint).groupby(goo.Team).sum()

或者从另一个角度来看:

ooze = data.melt(['Home', 'Away'])
ooze.value.groupby(ooze.Home.where(ooze.variable == 'HomePoint', ooze.Away)).sum()

关于python - groupby 并对两列求和并在 pandas 中设置为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51002693/

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