Pandas 分组 - 返回符合条件的组的第一行

2024-04-24 03:52:29 发布

您现在位置:Python中文网/ 问答频道 /正文

给定下面的示例数据集,我想每group返回一行,该行显示第一行的obsnum,且score小于0.4。你知道吗

import pandas as pd
import numpy as np

np.random.seed(42)

df = pd.DataFrame({'group': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c'],
'obsnum': [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],
'score' : np.random.rand(12)})

数据帧如下所示:

df
  group obsnum  score
0   a     1   0.374540
1   a     2   0.950714
2   a     3   0.731994
3   a     4   0.598658
4   b     1   0.156019
5   b     2   0.155995
6   b     3   0.058084
7   b     4   0.866176
8   c     1   0.601115
9   c     2   0.708073
10  c     3   0.020584
11  c     4   0.969910

返回的结果应该是这样的,并存储在另一个数据帧中。你知道吗

group   obsnum  score
a         1     0.374540
b         1     0.156019
c         3     0.020584

我试过这个df.groupby('group').apply(lambda x: x['score'] <= 0.4)和这个df.groupby('group')['obsnum', 'score'].min(),但都不是我想要的。你知道吗


Tags: 数据importnumpy示例pandasdfasnp
2条回答

你可以用

df[df['score'].le(0.4)].groupby('group').first()

     obsnum     score
group                  
a           1  0.374540
b           1  0.156019
c           3  0.020584

您可以先使用^{}^{}作为筛选器,然后使用^{}

df = df[df['score'] <= 0.4].drop_duplicates('group')
df = df.query('score <= 0.4').drop_duplicates('group')

print (df)
   group  obsnum     score
0      a       1  0.374540
4      b       1  0.156019
10     c       3  0.020584

相关问题 更多 >