Pandas:只显示每个id具有最小值的行
Pandas: show only the rows that have the minimum value for each id
假设我有一个像这样的 DataFrame:
id
length
width
2
12
12
2
13
15
4
14
19
4
11
13
7
34
67
7
33
64
7
40
78
7
22
33
我想要的是,id 的数字应该只显示一次并且它应该只显示具有 length[ 的列的最小值的行=25=].
结果将是:
id
length
width
2
12
12
4
11
13
7
22
33
试试
out = df.loc[df.groupby('id')['length'].idxmin()]
Out[220]:
id length width
0 2 12 12
3 4 11 13
7 7 22 33
我相信您在其他答案的评论中更新了您的请求。我提供了一些代码,应该可以让您获得预期的结果
df_pos = df.loc[df.mask(df['length'].ge(0)).dropna().groupby('id')['length'].idxmax()].reset_index().drop('index', axis = 1)
df_neg = df.loc[df.mask(df['length'].lt(0)).dropna().groupby('id')['length'].idxmin()].reset_index().drop('index', axis = 1)
df_con = pd.concat([df_pos, df_neg]).sort_values('id')
df_con
假设我有一个像这样的 DataFrame:
id | length | width |
---|---|---|
2 | 12 | 12 |
2 | 13 | 15 |
4 | 14 | 19 |
4 | 11 | 13 |
7 | 34 | 67 |
7 | 33 | 64 |
7 | 40 | 78 |
7 | 22 | 33 |
我想要的是,id 的数字应该只显示一次并且它应该只显示具有 length[ 的列的最小值的行=25=].
结果将是:
id | length | width |
---|---|---|
2 | 12 | 12 |
4 | 11 | 13 |
7 | 22 | 33 |
试试
out = df.loc[df.groupby('id')['length'].idxmin()]
Out[220]:
id length width
0 2 12 12
3 4 11 13
7 7 22 33
我相信您在其他答案的评论中更新了您的请求。我提供了一些代码,应该可以让您获得预期的结果
df_pos = df.loc[df.mask(df['length'].ge(0)).dropna().groupby('id')['length'].idxmax()].reset_index().drop('index', axis = 1)
df_neg = df.loc[df.mask(df['length'].lt(0)).dropna().groupby('id')['length'].idxmin()].reset_index().drop('index', axis = 1)
df_con = pd.concat([df_pos, df_neg]).sort_values('id')
df_con