2016-08-10 4 views
2

Может ли кто-нибудь помочь мне понять, почему существует различное поведение между двумя вызовами, которые применяются ниже? Спасибо.Python Pandas groupby-apply странное поведение

In [34]: df 
Out[34]: 
    A B C 
0 1 0 0 
1 1 7 4 
2 2 9 8 
3 2 2 4 
4 2 2 1 
5 3 3 3 
6 3 3 2 
7 3 5 7 

In [35]: g = df.groupby('A') 

In [36]: g.apply(max) 
Out[36]: 
    A B C 
A   
1 1 7 4 
2 2 9 8 
3 3 5 7 

In [37]: g.apply(lambda x: max(x)) 
Out[37]: 
A 
1 C 
2 C 
3 C 
dtype: object 
+3

Проверьте разницу между 'max (df)' и 'df.max()'. Я думаю, что это одно и то же поведение. –

+0

@PaulH Это должен был быть ответ. –

+0

@AmiTavory ehh. chrisb, я лучше объяснил это, чем мог. –

ответ

3

Короткий ответ - вы, вероятно, просто хочу

df.groupby('A').max() 

Долгий ответ - max основная функция питона, которая находит максимальную любого итерацию. Поскольку итерация DataFrame выполняется над столбцами, вызов python max просто находит «самый большой» столбец, который происходит во втором случае.

В первом случае - pandas имеет логику перехвата, которая превращает такие вещи, как g.apply(sum) в g.sum().

+0

Поздравляем с 10k! – bernie