如何在列中找到具有类似名称的单元格,并使用Python和DataFrame对其进行汇总

2024-10-04 05:22:57 发布

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

我有一个巨大的CVS文件,其中包含数据,我需要以非常具体的方式按列汇总单元格

我的数据帧是:

import pandas as pd
df = pd.DataFrame({'country': ['Brazil','Brazil','Brazil','Brazil','Brazil','Brazil','Chile'], 'city': ['Salvador','Salvador','Teresina','Teresina','Teresina','','Iquique'], 'name':['Gabriela','Gabriela','Maria','Fernanda','Carla','Solange','Isabel'], 'salary':[10.11,20.0,13.5,9.4,1.2,4.0,2.1], 'bonus':[3.3,4.2,7.1,0.2,5.1,2.0,1.1]})
   country      city      name  salary  bonus
0  Brazil  Salvador  Gabriela   10.11    3.3
1  Brazil  Salvador  Gabriela   20.00    4.2
2  Brazil  Teresina     Maria   13.50    7.1
3  Brazil  Teresina  Fernanda    9.40    0.2
4  Brazil  Teresina     Carla    1.20    5.1
5  Brazil             Solange    4.00    2.0
6   Chile   Iquique    Isabel    2.10    1.1

我需要按列name在单元格中查找名称相似的行,然后按列salary和列bonus进行汇总

输出表必须如下所示:

   country      city  salary  bonus
0  Brazil  Salvador   30.11    7.5
1  Brazil  Teresina   24.10   12.4
2  Brazil              4.00    2.0
3   Chile   Iquique    2.10    1.11

谢谢你的帮助


Tags: 数据namecitycountrypd汇总brazilsalary
3条回答

您可以使用groupby(在['country','city'])并指定要在(['salary', 'bonus'])上计算和的列,如下所示:

df.groupby(['country','city'], as_index=False)['salary', 'bonus'].sum()

  country      city  salary  bonus
0  Brazil              4.00    2.0
1  Brazil  Salvador   30.11    7.5
2  Brazil  Teresina   24.10   12.4
3   Chile   Iquique    2.10    1.1

您可以使用groupby按国家和城市进行分组,然后对所有剩余的进行求和:

new_df = df.groupby(['country','city']).agg({'salary': 'sum', 'bonus': 'sum'})

这将返回您希望的数据帧

使用groupby将国家和城市相同的行匹配在一起,并且agg告诉在您的情况下应用什么函数-求和

只要是城市和国家的一部分就可以做到:

df = df.groupby(by=['city', 'country'], as_index=False).sum()
print(df)

       city country  salary  bonus
0            Brazil    4.00    2.0
1   Iquique   Chile    2.10    1.1
2  Salvador  Brazil   30.11    7.5
3  Teresina  Brazil   24.10   12.4

相关问题 更多 >