【问题标题】:Pandas.Series.mode eventually have multirow results. How to fix it?Pandas.Series.mode 最终会有多行结果。如何解决?
【发布时间】:2020-09-18 10:09:56
【问题描述】:

我有这个 df:

nome_socio   cnpj_cpf_socio   municipio
Alexandre    AAA              Curitiba
Alexandre    AAA              Rio
Alexandre    AAA              Porto Alegre
Bruno        BBB              Porto Alegre
Bruno        BBB              Porto Alegre  

我想获得具有相同nome_sociocnpj_cpf_socio 的行的模式。为此,我使用以下代码:

moda_municipio=df[['nome_socio','cnpj_cpf_socio','municipio']].groupby(['nome_socio','cnpj_cpf_socio'])['municipio'].apply(pd.Series.mode).to_frame().reset_index().rename(columns={'municipio':"cidade_pred"})

它确实找到了模式,但是因为对于 Alexandre + AAA 行,三个 municipios 之间存在平局,它返回三个不同的行。我得到了这个结果:

  nome_socio cnpj_cpf_socio  level_2   cidade_pred
0  Alexandre            AAA        0      Curitiba
1  Alexandre            AAA        1  Porto Alegre
2  Alexandre            AAA        2           Rio
3      Bruno            BBB        0  Porto Alegre

我需要让它看起来像这样:

  nome_socio cnpj_cpf_socio  level_2                      cidade_pred
   Alexandre            AAA        0      Curitiba, Porto Alegre, Rio
       Bruno            BBB        0                     Porto Alegre

有办法吗?

【问题讨论】:

  • 检查my answer(ctrl+F“多种模式”)。解决方法是将.apply(pd.Series.mode)改为.agg(pd.Series.mode)
  • @cs95 谢谢你,你的回答确实很实用。我注意到您要求结束该问题,但是即使您在其他问题中的回答涵盖了该问题,但问题却完全不同。关闭它的缺点是你会阻止人们在谷歌搜索时遇到同样的问题,他们永远找不到。
  • 你刚才所说的听起来更像是一个论点 for 欺骗,IMO。您慷慨地确认我的回答包含解决您的问题所需的上下文。通过将您的 Q 标记为重复帖子,希望其他人来回答您的问题会找到指向规范帖子的链接,并且每个人都会获胜。 PS,关闭一个问题并不会降低它在谷歌上的搜索率。

标签: pandas pandas-groupby pandas-apply


【解决方案1】:

我们应该先做mode 然后join 结果

df.groupby(['nome_socio','cnpj_cpf_socio'])['cidade_pred'].agg(lambda x : ','.join(x.mode().tolist()))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多