我有一个这样的数据框:
col1 col2
0 maria apple
1 eugene apple
2 eugene banana
3 maria apple
4 maria pear
5 eugene banana
6 maria apple
我想按人分组,看看那个人最常见的水果是什么,如下:
col1 col2 col3
0 maria apple 3
1 eugene banana 2
编辑到目前为止我完成的是:
col1 col2
maria apple 2
pear 1
eugene banana 2
apple 1
与
df.groupby('col1')['col2'].value_counts()
但是我无法弄清楚如何只得到最大值,因为它是一个系列,而不是数据帧
答案 0 :(得分:1)
IIUC:
df.groupby('col1')['col2'].apply(lambda x: x.value_counts().head(1))
输出:
col1
eugene banana 2
maria apple 3
Name: col2, dtype: int64
答案 1 :(得分:0)
mode
的 scipy
from scipy import stats
df.groupby('col1').col2.apply(stats.mode)
Out[530]:
col1
eugene ([banana], [2])
maria ([apple], [3])
Name: col2, dtype: object
答案 2 :(得分:0)
首先在groupby()
上使用col1
,使用value_counts()
获取频率,然后使用sort_values()
函数按降序排序值
a = pd.DataFrame({"col1": ["maria","eugene","eugene","maria","maria","eugene","maria"],
"col2": ["apple", "apple","banana","apple","pear","banana","apple"]})
a.groupby(["col1"])["col2"].value_counts().sort_values(ascending=False)