Python 连接多个分组输出
我想对给定数据集的不同子集执行多个Python 连接多个分组输出,python,pandas,concatenation,pandas-groupby,Python,Pandas,Concatenation,Pandas Groupby,我想对给定数据集的不同子集执行多个.groupby()操作,并将它们绑定在一起。例如: 将熊猫作为pd导入 数据帧({“ID”:[1,1,2,2,2,3],“子集”:[1,1,2,2,3],“值”:[5,7,4,1,7,8]}) 打印(df) ID子集值 0 1 1 5 1 1 1 7 2 2 2 4 3 2 2 1 4 2 2 7 5 3 1
.groupby()
操作,并将它们绑定在一起。例如:
将熊猫作为pd导入
数据帧({“ID”:[1,1,2,2,2,3],“子集”:[1,1,2,2,3],“值”:[5,7,4,1,7,8]})
打印(df)
ID子集值
0 1 1 5
1 1 1 7
2 2 2 4
3 2 2 1
4 2 2 7
5 3 1 9
然后,我希望连接以下对象并将结果存储在熊猫数据帧中:
gr1=df[df[“Subset”]==1].groupby([“ID”,“Subset”]).mean()
gr2=df[df[“子集”]==2]。分组依据([“ID”,“子集])。平均值()
#为什么gr1和gr2在不同的行中有列名?
我意识到df.groupby([“ID”,“Subset”]).mean()
将提供我正在寻找的连接对象。请耐心听我说,这是我实际处理的一个简化示例
可以是将gr1
和gr2
转换为熊猫数据帧,然后像通常一样连接它们
基本上,我的问题如下:
groupby
结果转换为数据帧对象groupby
结果绑定在一起,然后将其转换为数据帧PS:我来自R背景,所以对我来说,将数据帧按某个对象分组并将输出返回为不同类型的对象(系列或多索引数据帧)是很奇怪的。这也是我问题的一部分:为什么
.groupby
返回一个系列?这是什么类型的连续剧?为什么一个系列可以有多个列和一个索引?在您的示例中,返回类型是一个对象。要使用单个值的单个转换函数返回数据帧,可以使用以下方法。请注意包含的为_index=False
但是,如果您希望聚合多个函数,如。如果您希望避免使用
df.groupby([“ID”,“Subset”]).mean()
,那么您可以使用以下示例
如果您只关心处理特定的行子集,那么以下内容可能适用,因为它消除了连接结果的必要性
如果在group by之后使用agg操作,它将在my pandas 0.25上返回数据帧对象,
gr1
和gr2
是数据帧。你的版本是什么?您可以像下面这样将它们转换为_frame()@code您是对的gr1
和gr2
是数据帧,但列名位于不同的行上。为什么会这样?
>>> gr1 = df[df["Subset"] == 1].groupby(["ID","Subset"], as_index=False).mean()
>>> gr1
ID Subset Value
0 1 1 6
>>> gr1 = df[df["Subset"] == 1].groupby(["ID","Subset"], as_index=False).mean()
>>> gr2 = df[df["Subset"] == 2].groupby(["ID","Subset"], as_index=False).mean()
>>> pd.concat([gr1, gr2]).reset_index(drop=True)
ID Subset Value
0 1 1 6
1 2 2 4
>>> values = [1,2]
>>> df[df['Subset'].isin(values)].groupby(["ID","Subset"], as_index=False).mean()
ID Subset Value
0 1 1 6
1 2 2 4