使用 pandas.DataFrame.mode 和 groupby 在数据框中找到大多数 [重复]

Posted

技术标签:

【中文标题】使用 pandas.DataFrame.mode 和 groupby 在数据框中找到大多数 [重复]【英文标题】:Find the majority in dataframe using pandas.DataFrame.mode and groupby [duplicate] 【发布时间】:2018-11-27 19:58:32 【问题描述】:

如何为每个组的大多数人获取一个新列?

示例数据帧

    who        state
0   peopleA     CA
1   peopleA     CA
2   peopleA     CA
3   peopleA     NJ
4   peopleB     FL
5   peopleB     FL
6   peopleB     CA

这不是正确的编码方式

df['new_column'] = df.groupby('who').mode()

我的预期输出

    who        new_column
0   peopleA      CA
1   peopleB      FL

奖金问题: 有没有办法设置一个阈值来控制如果计数大于 70%,则认为是多数,如果小于 70%,则返回 null

【问题讨论】:

这是你想要的吗?:pandas.pydata.org/pandas-docs/stable/generated/… 切分“谁”并计算“国家”? @JeffEllen 不完全是 【参考方案1】:

pandas.groupby 没有mode()。解决方法是here。基本上分组后,您可以使用.apply() 到分组器并找到特定于该组的模式。

df.groupby('who').state.apply(lambda x: x.mode()).reset_index(0)

输出:

      who   state
0   peopleA CA
0   peopleB FL

【讨论】:

可以,但是索引号变成0和0【参考方案2】:

我们可以按列who分组,然后在df groupby对象上应用mode函数,然后调用reset_index并传递参数drop=True,这样多索引就不会作为列添加回来

>>> df
       who state
0  peopleA    CA
1  peopleA    CA
2  peopleA    CA
3  peopleA    NJ
4  peopleB    FL
5  peopleB    FL
6  peopleB    CA
>>> 
>>> df.groupby('who').apply(pd.DataFrame.mode).reset_index(drop=True)
       who state
0  peopleA    CA
1  peopleB    FL
>>> 

【讨论】:

有没有办法设置一个阈值来控制如果计数大于70%,则认为是多数,如果小于70%,则返回null? 如果我有两列以上,如何为模式函数指定列的名称?

以上是关于使用 pandas.DataFrame.mode 和 groupby 在数据框中找到大多数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份