假设我必须有两个名为“ country_to_country”和“ country_area_mapping”的数据框,如下所示。

>>> country_to_country
  From  To  Volume
0   c1  c4      10
1   c2  c5      20
2   c3  c6      30

>>> country_area_mapping
  Country  Area
0   c1     a1
1   c2     a2
2   c3     a1
3   c4     a2
4   c5     a1
5   c6     a2


预期输出为:

  From  To  Volume
0   a2  a1      40
1   a2  a1      20


应将国家名称替换为相应的区域,然后使用“数量”列上的sum分组表格。

我的方法是将两次“合并”用于“发件人”列,然后将结果合并到“发件人”列中。最后,应用“ groupby”对相同的“从-到”区域体积求和。
但是,我觉得有一个更短的方法可以这样做。有其他建议吗?

最佳答案

您可以在DataFrame.replace中使用Series,然后在groupby中使用sum进行汇总:

s = country_area_mapping.set_index('Country')['Area']
df = country_to_country.replace({'From':s, 'To':s})
                       .groupby(['From','To'], as_index=False)['Volume'].sum()
print (df)
  From  To  Volume
0   a1  a2      40
1   a2  a1      20

关于python - 重命名该列的条目,然后用 Pandas 分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45540150/

10-16 03:45