【问题标题】:Python DataFrame how to get all rows with the same name and add the values togetherPython DataFrame如何获取具有相同名称的所有行并将值相加
【发布时间】:2022-01-08 01:35:20
【问题描述】:

当我搜索我的问题时,我一直发现将相同的值组合在一起,但我希望获得每个团队的价值并将它们加在一起

例如,这是我的Dataframe

0   Liverpool        4        
1   West Ham         0
2   Bournemouth      1
3   Burnley          3
4   Crystal Palace   0
5   Liverpool        6
6   West Ham         2
7   Bournemouth      8
8   Burnley          1
9   Crystal Palace   4

我在网上看到的所有示例都只是将它们组合在一起

例如

0   Liverpool        4 
1   Liverpool        5       
2   West Ham         2
3   West Ham         1
4   Crystal Palace   4
5   Crystal Palace   1

但我追求的是从高到低的顺序

0   Liverpool        9 
1   Crystal Palace   5
2   West Ham         3

【问题讨论】:

  • df.groupby('club')['goals'].sum()
  • 您如何在右侧栏中获得所需的数字?我在df 看到主循环有 6 和 4,所以总和为 10;水晶宫有 4 和 0,总和为 4,西汉姆有 2 和 0,总和为 0。都与您想要的输出不同。
  • @Drecker 说了什么 + .sort_values(ascending=False)
  • @Drecker。我在那里做过,但它似乎将给定球队的所有 19 场比赛进球放在一起,而没有添加它们。在上面添加了图片。
  • match_data1.dtypes 的输出是什么?从您更新的输出来看,您的“FTHG”似乎不是数字,而是字符串,因此不会相加。

标签: python dataframe


【解决方案1】:

从你通过分组和求和得到的结果来看,结果几乎可以肯定地告诉你有 col FTHG 作为字符串,因为sum() 操作将字符串附加到其他字符串,你在最后得到字符串 concat 而不是求和值.请尝试以下操作:

match_data1["FTHG"] = match_data1.astype(int)
match_data1.groupby("HomeTeam")["FTHG"].sum().sort_values(ascending=False)

编辑:@Emi OB 的评论之后。如果 "FTHG" 列可以为空,则使用浮点转换,并在 sum 之前填充 na(或之后忽略它们),您也可以使用 here 讨论的 nansum 方法。

match_data1["FTHG"] = match_data1.astype(float)
match_data1.groupby("HomeTeam")["FTHG"].fillna(0.0).sum().sort_values(ascending=False)

【讨论】:

  • 查看利物浦问题中的输出,FTHG 列中似乎有一个“NP”值,无法转换为 int,所以我猜这些值需要先处理。
  • 是的,你是对的,float 会是一个更好的转换。我相应地更新了答案。
  • 我认为 float 也不会更新 NP,不确定如何处理。看看问题上的 cmets 似乎 OP 已经用它来解决他们的问题,所以也许 NP 不是问题
  • @EmiOB 是的,我修复了 Np,我知道这不是最好的方法,但它只有 1 行,所以我进入 csv 文件并将其更改为 0
  • @AndroidDev 我更新了答案,以防列可以为空。
猜你喜欢
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 2020-01-02
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
相关资源
最近更新 更多