大Pandas优先权提取的分组与处理

2024-09-29 04:22:09 发布

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

现在我想处理数据帧

df

A B
1 A0
1 A1
1 B0
2 B1
2 B2
3 B3
3 A2
3 A3

首先,我想按df.A分组

sub1

A B
1 A0
1 A1
1 B0

第二,我想提取包含字母A的第一行

A B
1 A0

如果没有A

sub2

A B
2 B1
2 B2

我想提取第一行

A B
2 B1

所以,我想得到下面的结果

A B
1 A0
2 B1
3 A2

我想处理优先级提取,我尝试了分组,但无法解决。怎么处理?你知道吗


Tags: 数据a2dfa1字母b0a0b2
1条回答
网友
1楼 · 发布于 2024-09-29 04:22:09

您可以按列A分组,对于每个组,在str.contains("A")上使用idxmax(),然后如果列B中有A,它将得到包含字母A的第一个索引,否则它将返回到第一行,因为所有值都是False

df.groupby("A", as_index=False).apply(lambda g: g.loc[g.B.str.contains("A").idxmax()])

#   A   B
#0  1   A0
#1  2   B1
#2  3   A2

在可能有重复索引的情况下,可以将numpy.ndarray.argmax()iloc一起使用,后者接受整数作为位置索引:

df.groupby("A", as_index=False).apply(lambda g: g.iloc[g.B.str.contains("A").values.argmax()])

#   A   B
#0  1   A0
#1  2   B1
#2  3   A2

相关问题 更多 >