Python 3.x 熊猫按两列分组,并按降序排列其中一列的每个值的前n行
我有一个包含许多列的熊猫数据框架(两个感兴趣的列名是Python 3.x 熊猫按两列分组,并按降序排列其中一列的每个值的前n行,python-3.x,pandas,pandas-groupby,greatest-n-per-group,Python 3.x,Pandas,Pandas Groupby,Greatest N Per Group,我有一个包含许多列的熊猫数据框架(两个感兴趣的列名是a和b) 我想按a和b 计算每个组的发生率 按事件的降序对每个组进行排序 对于b的每个值,我想取出现次数最多的a的前n个值 我可以使用以下代码执行步骤3: a_b_count = df.groupby(['a', 'b']).size().reset_index().rename({0:'count'},axis='columns').sort_values('count', ascending = False) 但是,对于b的每个值,如
a
和b
)
a
和b
b
的每个值,我想取出现次数最多的a
的前n个值 a_b_count = df.groupby(['a', 'b']).size().reset_index().rename({0:'count'},axis='columns').sort_values('count', ascending = False)
但是,对于b
的每个值,如何获得a
的前n个值,其中出现次数最多
示例
df =
a b ...
a1 b1 ...
a2 b1 ...
a1 b1 ...
a1 b2 ...
a2 b2 ...
a2 b2 ...
预期输出(对于n=1
):
您可以使用而不是排序
。相对于系列大小,较小的n
会更快
这里有一种方法,使用获取列
a
和b
的频率:
pd.crosstab(df.a, df.b).stack().nlargest(1, keep="all").reset_index(name="count")
您想要
计数
还是前N个值
?这是两种不同的情况。您的步骤4显示Top N,但您的输出显示count。另外,在您的输出中,a列和b列是向后的吗?我希望在减少计数的基础上得到前n个值。这有意义吗?
df.groupby(['a', 'b']).size().groupby(
level=1).nlargest(n).reset_index(-1, drop=True)
b a
b1 a1 2
b2 a2 2
dtype: int64
pd.crosstab(df.a, df.b).stack().nlargest(1, keep="all").reset_index(name="count")