【问题标题】:Group a dataframe by a column and concactenate strings in another按列对数据框进行分组并在另一个中连接字符串
【发布时间】:2019-10-16 09:15:20
【问题描述】:

我知道这应该很容易,但它让我发疯......

我正在尝试将数据框转换为分组数据框。

df 输出:

    Postcode    Borough             Neighbourhood
0   M3A         North York          Parkwoods
1   M4A         North York          Victoria Village
2   M5A         Downtown Toronto    Harbourfront
3   M5A         Downtown Toronto    Regent Park
4   M6A         North York          Lawrence Heights
5   M6A         North York          Lawrence Manor
6   M7A         Queen's Park        Not assigned
7   M9A         Etobicoke           Islington Avenue
8   M1B         Scarborough         Rouge
9   M1B         Scarborough         Malvern
10  M3B         North York          Don Mills North
...

我想创建一个分组数据框,其中 Neighborhood 按 Postcode 分组,然后所有邻域变成 Neighborhoods 的串联字符串,按 Postcode 分组... 类似:

    Postcode    Borough             Neighbourhood
0   M3A         North York          Parkwoods
1   M4A         North York          Victoria Village
2   M5A         Downtown Toronto    Harbourfront, Regent Park
...

我正在尝试使用:

df.groupby(['Postcode'])['Neighbourhood'].apply(lambda strs: ', '.join(strs))

但这不会返回新的数据帧..当我在运行后使用df时,它会输出相同的原始数据帧。

如果我使用:

df = df.groupby(['Postcode'])['Neighbourhood'].apply(lambda strs: ', '.join(strs))

它把 df 变成一个对象?

【问题讨论】:

  • 谢谢.. 看起来我在正确的轨道上,但我仍然无法让数据框显示正确。 df.groupby('Postcode').agg({'Neighbourhood':lambda x:', '.join(x)}) 然后df 仍然返回一个未分组的数据帧...
  • 如果您不将新数据框分配给新变量,则不会。我很确定 group by 没有到位
  • 所以看起来所有要做的就是创建一个以 Postcode 作为索引的新数据框,但 Neighborhood 看起来是正确的..现在需要弄清楚如何将它恢复到原始数据框..
  • .reset_index() 添加到链的末尾。文档可以找到here

标签: python dataframe


【解决方案1】:

使用此代码

new_df = df.groupby(['Postcode', 'Borough']).agg({'Neighbourhood':lambda x:', '.join(x)}).reset_index()

reset_index() 将按列从索引中取出您的分组,并将其作为列返回到数据框并创建一个新的整数索引。

【讨论】:

  • 谢谢!我将如何保留“自治市镇”列?
  • 编辑答案以反映这一点
猜你喜欢
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 2022-05-22
  • 2023-03-08
  • 2021-12-10
  • 2021-07-28
  • 2021-02-19
  • 1970-01-01
相关资源
最近更新 更多