Python 熊猫:传递给agg函数的对象的数据类型是什么

Python 熊猫:传递给agg函数的对象的数据类型是什么,python,pandas,numpy,Python,Pandas,Numpy,我一直很好奇到底传递给agg函数的是什么 Id NAME SUB_ID 276956 A 5933 276956 B 5934 276956 C 5935 287266 D 1589 所以当我调用一个agg函数时,x的数据类型到底是什么 df.groupby('Id').agg(lambda x: set(x)) 根据我自己的挖掘,我发现x是,但我不明白它到底是什么。我试图做的是将任何特定组的记录压缩成一行。对于ID276956,

我一直很好奇到底传递给agg函数的是什么

Id      NAME   SUB_ID
276956  A      5933
276956  B      5934
276956  C      5935
287266  D      1589
所以当我调用一个agg函数时,x的数据类型到底是什么

df.groupby('Id').agg(lambda x: set(x))
根据我自己的挖掘,我发现x是
,但我不明白它到底是什么。我试图做的是将任何特定组的记录压缩成一行。对于ID276956,我想在一个单元格中的Name列下有A,B,C。我一直在把它转换成一个集合,但这让我对Nan和None的价值观感到有些悲伤。我想知道压缩一行的最好方法是什么。如果这些是numpy数组,那么我不需要转换,而是类似于

df.groupby('Id').agg(lambda x: x)

抛出一个错误

您正在使用的
系列

print (df.groupby('Id').agg(lambda x: print(x)))
0    A
1    B
2    C
Name: NAME, dtype: object
3    D
Name: NAME, dtype: object
0    5933
1    5934
2    5935
Name: SUB_ID, dtype: int64
3    1589
Name: SUB_ID, dtype: int64
您可以使用自定义函数,但必须聚合输出:

def f(x):
    print (x)
    return set(x)

print (df.groupby('Id').agg(f))
             NAME              SUB_ID
Id                                   
276956  {C, B, A}  {5933, 5934, 5935}
287266        {D}              {1589}     
如果需要聚合
连接
,数字列为:

如果
mean
,则省略
string
列:

print (df.groupby('Id').mean())
        SUB_ID
Id            
276956    5934
287266    1589

更常见的是使用功能-请参阅:

本例中的
x
将是
Id
上每个相关分组的序列

要实际获取值列表,请执行以下操作:

>>> df[['Id', 'NAME']].groupby('Id').agg(lambda x: x.values.tolist())
             NAME
Id               
276956  [A, B, C]
287266        [D]
更一般地说,
x
将是相关分组的数据帧,您可以对其执行通常可以使用数据帧执行的任何操作,例如:

>>> df.groupby('Id').agg(lambda x: x.shape)
        NAME SUB_ID
Id                 
276956  (3,)   (3,)
287266  (1,)   (1,)

我很高兴能帮助你。请不要忘记接受我的或其他答案。谢谢
>>> df[['Id', 'NAME']].groupby('Id').agg(lambda x: ', '.join(x))
           NAME
Id             
276956  A, B, C
287266        D
>>> df[['Id', 'NAME']].groupby('Id').agg(lambda x: x.values.tolist())
             NAME
Id               
276956  [A, B, C]
287266        [D]
>>> df.groupby('Id').agg(lambda x: x.shape)
        NAME SUB_ID
Id                 
276956  (3,)   (3,)
287266  (1,)   (1,)