2017-02-22 24 views
1

Учитывая DataFrame df, можно получить размер групп по колонку А сПолучения как размер группы и мин в столбце B группировки по колонку А

df.groupby(['columnA']).size() 

и значением mimimun в столбце В пределах каждой группы с

df.groupby(['columnA']).agg({'columnB':min}) 

или (синтаксический сахар, я предполагаю)

df.groupby(['columnA'])['columnB'].min() 

, но как я могу ОСТ ain непосредственно DataFrame с такими двумя столбцами?

В SQL, если вы знакомы с ним, это было бы так просто, как

SELECT count(columnA), min(columnB) FROM table GROUP BY columnA 

Спасибо заранее за любую подсказку.

ответ

1

Размещение обоих из них в agg должно работать, поскольку agg разрешает список функций.

>>> df 
    columnA columnB columnC 
0 cat1  3  400 
1 cat1  2  20 
2 cat1  5  3029 
3 cat2  1  492 
4 cat2  4  30 
5 cat3  2  203 
6 cat3  6  402 
7 cat3  4  391 

>>> df.groupby(['columnA']).columnB.agg(['size', 'min']) 
     size min 
columnA   
cat1  3 2 
cat2  2 1 
cat3  3 2 

>>> df.groupby(['columnA']).agg(['size', 'min']) 
     columnB  columnC  
      size min size min 
columnA       
cat1   3 2  3 20 
cat2   2 1  2 30 
cat3   3 2  3 203 

agg также принимает Dict столбцов -> функции, и поэтому были вы хотите отобразить функцию каждого столбца по отдельности вы могли бы сделать это с чем-то (здесь нет необходимости) как

df.groupby(['columnA']).agg({'columnA':'size','columnB':'min‌​'}) 
+0

Я думаю, что ваш первый ответ 'df.groupby (['columnA']). Agg ({'columnA': 'size', 'columnB': 'min'})' был более общим и полезным в реальном мире. Я бы предложил добавить его обратно. – mmj

+0

@mmj Конечно, я могу добавить рекламное сообщение об использовании dicts. – miradulo

+0

Возможно, вам будет интересно решить следующий вопрос: http://stackoverflow.com/q/42399574/694360 – mmj