使用 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有三种方式(不使用,动态使用,静态使用,默认是动态使用)