如何为每个群体的大多数人获取新列?
示例数据框
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
答案 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