Python 熊猫:传递给agg函数的对象的数据类型是什么
我一直很好奇到底传递给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,
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,)