该
Dataframe对象没有
nunique,只有
Series。您必须选择要应用于哪一列
nunique()。您可以使用简单的点运算符执行此操作:
df.groupby('A').apply(lambda x: x.B.nunique())将打印:
Abar 2flux 2foo 3
并做:
df.groupby('A').apply(lambda x: x.E.nunique())将打印:
Abar 1flux 2foo 2
或者,您可以使用以下方法通过一个函数调用来执行此操作:
df.groupby('A').aggregate({'B': lambda x: x.nunique(), 'E': lambda x: x.nunique()})它将打印:
B EAbar 2 1flux 2 2foo 3 2
为了回答您的问题,为什么递归lambda也要打印该
A列,这是因为当您执行
groupby/
apply操作时,您现在要遍历三个
Dataframe对象。每个
Dataframe对象都是
Dataframe原始对象的子对象。将操作应用于该操作将应用于每个操作
Series。您要应用运算符的
Series每个对象有3个。
Dataframe``nunique()
Series每个
Dataframe值的第一个被评估
A
Series,并且因为您完成了一个
groupbyon
A,您知道在每个
Dataframe值中,只有一个唯一的值
A
Series。这就解释了为什么最终会给您一个
A包含所有的结果列
1。



