2016-09-09 3 views
3

Я новичок в DataFrames, и я хочу сгруппировать несколько столбцов, а затем суммировать и сохранить счет в последнем столбце. напримерСоздайте два агрегатных столбца по Group By Pandas

s = pd.DataFrame(np.matrix([[1, 2,3,4], [3, 4,7,6],[3,4,5,6],[1,2,3,7]]), columns=['a', 'b', 'c', 'd']) 

    a b c d 
0 1 2 3 4 
1 3 4 7 6 
2 3 4 5 6 
3 1 2 3 7 

Я хочу группы по a, b и c, но затем просуммировать по d и количества элементов в пределах группы. я могу рассчитывать на

s = s.groupby(by=["a", "b", "c"])["d"].count() 

    a b c 
    1 2 3 2 
    3 4 5 1 
      7 1 

И я могу суммировать по

s = s.groupby(by=["a", "b", "c"])["d"].sum() 

a b c 
1 2 3 11 
3 4 5  6 
     7  6 

Однако я хочу, чтобы объединить его таким образом, что в результате dataframe имеет как суммы и количества столбцов.

a b c sum count 
    1 2 3 11  2 
    3 4 5  6  1 
      7  6  1 

ответ

1

Вы можете использовать aggregate, или сокращенный вариант agg:

print (s.groupby(by=["a", "b", "c"])["d"].agg([sum, 'count'])) 
#print (s.groupby(by=["a", "b", "c"])["d"].aggregate([sum, 'count'])) 
     sum count 
a b c    
1 2 3 11  2 
3 4 5 6  1 
    7 6  1 

Pandas documentation.

Разница между size и count является:

size подсчитывает NaN значения, count не делает.

Если необходимо рассчитывать NaN значения также:

print (s.groupby(by=["a", "b", "c"])["d"].agg([sum, 'size'])) 
     sum size 
a b c   
1 2 3 11  2 
3 4 5 6  1 
    7 6  1 
Смежные вопросы