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