Python 什么';对于数据帧的每组,获得可变长度的行w.r.t是最有效的方法

Python 什么';对于数据帧的每组,获得可变长度的行w.r.t是最有效的方法,python,pandas,dataframe,Python,Pandas,Dataframe,为了清楚地说明我的问题,对于这样的虚拟数据帧: df = pd.DataFrame({'X' : ['B', 'B', 'A', 'A', 'A'], 'Y' : [1, 2, 3, 4, 5]}) pd.DataFrame({'X' : ['B', 'B', 'A'], 'Y' : [1, 2, 3]}) 如何获得A组的前1行和B组的前2行,并除去每组的其余行?顺便说一下,真正的数据集很大,有数十万行和数千组 输出如下所示: df = pd.DataFrame({'X' : ['B', '

为了清楚地说明我的问题,对于这样的虚拟数据帧:

df = pd.DataFrame({'X' : ['B', 'B', 'A', 'A', 'A'], 'Y' : [1, 2, 3, 4, 5]})
pd.DataFrame({'X' : ['B', 'B', 'A'], 'Y' : [1, 2, 3]})
如何获得A组的前1行和B组的前2行,并除去每组的其余行?顺便说一下,真正的数据集很大,有数十万行和数千组

输出如下所示:

df = pd.DataFrame({'X' : ['B', 'B', 'A', 'A', 'A'], 'Y' : [1, 2, 3, 4, 5]})
pd.DataFrame({'X' : ['B', 'B', 'A'], 'Y' : [1, 2, 3]})

我的主要抱怨是
.groupby().head()
只给了我每个组中固定长度的行,我希望不同组中有不同数量的行

一种方法是创建一个包含每个组应保留的行数的字典,在
groupby.apply
中,使用
g.name
作为键在字典中查找值,使用
head
方法可以为每个组保留不同的行:

rows_per_group = {"A": 1, "B": 2}    
df.groupby("X", group_keys=False).apply(lambda g: g.head(rows_per_group[g.name]))

#   X   Y
#2  A   3
#0  B   1
#1  B   2

一种方法是创建一个包含每个组应保留的行数的字典,在
groupby.apply
中,使用
g.name
作为键在字典中查找值,使用
head
方法可以为每个组保留不同的行:

rows_per_group = {"A": 1, "B": 2}    
df.groupby("X", group_keys=False).apply(lambda g: g.head(rows_per_group[g.name]))

#   X   Y
#2  A   3
#0  B   1
#1  B   2

也许可以提供一个示例输出?当你说get-如果你想独立的话:
df[df['X']=='A'][0:1]
df[df['X]'=='B'][0:2]
这是一种方法,但是连接数千个是没有多大效率的,而且需要很长时间。也许可以提供一个示例输出?当你说get-如果你想独立的话:
df[df['X']='a'][0:1]
df[df['X]'='B'][0:2]
这是一种方法,但是连接数千个是没有多大效率的,而且需要很长时间。@piRSquared感谢你的评论@谢谢你的评论!