使用pandas.DataFrame.mode和groupby在数据框中查找多数

时间:2018-06-18 22:55:51

标签: python pandas

如何为每个群体的大多数人获取新列?

示例数据框

    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

2 个答案:

答案 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
>>> 

答案 1 :(得分: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