社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何在Python中获取组的第一行

asmgx • 3 年前 • 1279 次点击  

Python新手。

我有两个数据帧

第一个叫做df_my

ICD   Distance  ID   Grp
-------------------------
AB    0         1     1
JG    0         4     1
NH    1         5     2
UY    1         7     1
SS    2         9     1
ED    2         14    2
KK    2         15    3
QR    3         18    3
XZ    3         19    1
FD    4         22    1
LN    5         24    4
TT    5         31    2

另一个数据帧名为df_Map,如下所示

0    1
--------
JG   838
LN   228
SS   699
FD   100
ED   483
QR   594
AB   349
NH   777
KK   505
TT   866

我想做的是

首先,从df_my获得每组的第一条记录,按id或距离大于3的记录排序

所以应该变成这样

ICD   Distance  ID   Grp
-------------------------
AB    0         1     1   <== First of its group
NH    1         5     2   <== First of its group
KK    2         15    3   <== First of its group
FD    4         22    1   <== Distance > 3
LN    5         24    4   <== Distance > 3
TT    5         31    2   <== Distance > 3

之后我想把它和df_地图匹配起来

也会是这样

ICD   Distance  ID   Grp    Map
--------------------------------
AB    0         1     1     349
NH    1         5     2     777
KK    2         15    3     505
FD    4         22    1     100
LN    5         24    4     228
TT    5         31    2     866

我想知道怎么做

我是从这个开始的

df_Final = df_my(Distance>3)

但我不知道如何从小组中的第一张唱片开始?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132128
 
1279 次点击  
文章 [ 1 ]  |  最新文章 3 年前
mozway
Reply   •   1 楼
mozway    3 年前

假设 ,你可以用口罩 boolean indexing 然后 merge

m1 = df_my.groupby('Grp').cumcount().eq(0)
m2 = df_my['Distance'].gt(3)

out = df_my[m1|m2].merge(df_Map.set_axis(['ICD', 'Map'], axis=1),
                         on='ICD')

输出:

  ICD  Distance  ID  Grp  Map
0  AB         0   1    1  349
1  NH         1   5    2  777
2  KK         2  15    3  505
3  FD         4  22    1  100
4  LN         5  24    4  228
5  TT         5  31    2  866