Pandas - 前 n 个最大值 groupby pandas 数据帧
Pandas - first n maximum values groupby pandas dataframe
我有一个 pandas 数据框如下:
df = pd.DataFrame({
'a': [1, 1, 1, 1, 1, 2, 2, 2, 2],
'b': [3, 2, 1, 4, 2, 1, 2, 2, 1]
})
这给了我
>>> df
a b
0 1 3
1 1 2
2 1 1
3 1 4
4 1 2
5 2 1
6 2 2
7 2 2
8 2 1
我想按列a
对数据帧进行分组,return前N个最大值来自每组的第 b
列,按最大值降序排列。
我做了什么?
假设我只想要前两个最大值,我做了以下操作:
- 按两列降序对数据框进行排序
- 获取前两个值
- 由于这些值是升序排列的,所以再按降序排列
df = df.sort_values(['a', 'b'], ascending=False)
df = df.groupby('a').nth([0,1])
df = df.sort_values(['a', 'b'], ascending=False).reset_index()
这给了我
>>> df
a b
0 2 2
1 2 2
2 1 4
3 1 3
输出工作正常,但这不是执行此操作的有效方法。
我也试过 nlargest
函数,但没有用,因为它会删除其他列,return 只会删除 b
列。
df = df.groupby('a')['b'].nlargest(2)
这给了我
>>> df
0 2
1 2
2 4
3 3
Name: b, dtype: int64
最好的方法是什么?
Sort
按列的值 b
然后 group
数据框并使用 head(n)
聚合到 select 的前 n
行每组
df.sort_values('b', ascending=False).groupby('a').head(2)
a b
3 1 4
0 1 3
6 2 2
7 2 2
我有一个 pandas 数据框如下:
df = pd.DataFrame({
'a': [1, 1, 1, 1, 1, 2, 2, 2, 2],
'b': [3, 2, 1, 4, 2, 1, 2, 2, 1]
})
这给了我
>>> df
a b
0 1 3
1 1 2
2 1 1
3 1 4
4 1 2
5 2 1
6 2 2
7 2 2
8 2 1
我想按列a
对数据帧进行分组,return前N个最大值来自每组的第 b
列,按最大值降序排列。
我做了什么?
假设我只想要前两个最大值,我做了以下操作:
- 按两列降序对数据框进行排序
- 获取前两个值
- 由于这些值是升序排列的,所以再按降序排列
df = df.sort_values(['a', 'b'], ascending=False)
df = df.groupby('a').nth([0,1])
df = df.sort_values(['a', 'b'], ascending=False).reset_index()
这给了我
>>> df
a b
0 2 2
1 2 2
2 1 4
3 1 3
输出工作正常,但这不是执行此操作的有效方法。
我也试过 nlargest
函数,但没有用,因为它会删除其他列,return 只会删除 b
列。
df = df.groupby('a')['b'].nlargest(2)
这给了我
>>> df
0 2
1 2
2 4
3 3
Name: b, dtype: int64
最好的方法是什么?
Sort
按列的值 b
然后 group
数据框并使用 head(n)
聚合到 select 的前 n
行每组
df.sort_values('b', ascending=False).groupby('a').head(2)
a b
3 1 4
0 1 3
6 2 2
7 2 2