【问题标题】:Group by in Python Pandas (Multiple columns join with , )在 Python Pandas 中分组(多列用 , 连接)
【发布时间】:2021-03-17 00:29:54
【问题描述】:

我有一个 CSV 表格,如下所示:

Base CSV

我需要像这样对它进行分组:

在我所有的CONCURSO 中,只有CIDADEUF 发生变化。

Expectd CSV

我正在尝试这段代码,但它不起作用。

你们能帮帮我吗?

import...

    new_df = pd.read_csv(fr'C:\Users\anton\Desktop\Anon\data\swamp\{date}\nao_tratado.csv')
    new_df = new_df.groupby(by=['Concurso'], as_index=False).agg(','.join)
    new_df = pd.concat([new_df]).to_csv(fr'C:\Users\anton\Desktop\Anon\data\lake\{date}\tratado.csv', index=False)
    print('We are done.')

【问题讨论】:

  • 所以在你所有的Concurso 之间,只有CidadeUF 变化?
  • 是的,只有这两列发生了变化。 CONCURSO 需要合并成一行,UFCIDADE 需要嵌套在一个单元格中,用逗号分隔值。

标签: python pandas group-by pandas-groupby


【解决方案1】:

Pandas 的agg() 方法可以为func 参数获取字典。此 dict 映射列及其聚合函数。

我猜你可以这样做:

columns_to_aggregate = ["Cidade", "UF"]
columns_for_groupby = ["Concurso"]
columns = list(set(new_df.columns).difference(columns_for_groupby))
aggregation_func = {c: (lambda x: ", ".join(map(str, x))) if c in columns_to_aggregate else "min" for c in columns}
new_df = new_df.groupby(by=columns_for_groupby, as_index=False).agg(aggregation_func)
new_df.to_csv(fr'C:\Users\anton\Desktop\Anon\data\lake\{date}\tratado.csv', index=False)

如果它不起作用,请告诉我:)

【讨论】:

  • 这段代码几乎可以工作...所有Cidade 变为0 并且UF 没有用逗号分隔。
  • 试试新的!我只是稍微改变了aggregation_func。
  • 我们有 2 个错误。第一个:line 61, in <module> new_df = new_df.groupby(by=columns_for_groupby, as_index=False).agg(aggregation_func) 第二个:line 60, in <lambda> aggregation_func = {c: (lambda x: ", ".join(x)) if c in columns_to_aggregate else "min" for c in columns} 输出错误:TypeError: sequence item 0: expected str instance, float found
  • 代码改变了列的顺序,所有的空单元格都变成了NaN,但是成功了! :3
  • 然后您可以轻松地对 groupby 进行后处理以根据需要制作 Nan 单元格并重新排序数据集!
猜你喜欢
  • 2019-05-19
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2018-05-15
  • 2021-01-23
  • 2021-09-23
  • 2021-12-16
  • 1970-01-01
相关资源
最近更新 更多