Pandas: просуммировать каждые k столбцов - PullRequest
1 голос
/ 27 мая 2020

У меня есть фрейм данных, как я могу получить сумму столбца для каждого K cloumns, например, от

   Name    1       2         3       4
    A      2       3         5       8
    B      1       2         3       4
    C      1       6         8       9
    D      2       4         5       5
    E      3       3         3       3

суммирования для каждых 2 столбцов до

   Name   1       2   
    A     5       13 
    B     3       7  
    C     7       17   
    D     6       10  
    E     6       6   

Окно и номер столбцов могут быть очень большими. Есть ли способ сделать это без fot l oop?

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

Вы можете использовать df.rolling по оси 1 с размером окна 2.

df.set_index('Name').rolling(2,axis=1).sum().iloc[:,1::2]

        2     4
Name
A     5.0  13.0
B     3.0   7.0
C     7.0  17.0
D     6.0  10.0
E     6.0   6.0
1 голос
/ 27 мая 2020

Вы можете использовать целочисленное деление на // со вспомогательным массивом по длине столбцов и перейти к groupby на axis=1 с агрегатом sum:

#if Name is column
df = df.set_index('Name')

K = 2
df = df.groupby(np.arange(len(df.columns)) // K, axis=1).sum()
print (df)
      0   1
Name       
A     5  13
B     3   7
C     7  17
D     6  10
E     6   6

Подробности :

print (np.arange(len(df.columns)))
[0 1 2 3]

print (np.arange(len(df.columns)) // K)
[0 0 1 1]

Или, если значения являются последовательными целыми числами, начинающимися с 1, можно вычесть 1 и разделить:

df = df.groupby((df.columns - 1) // K, axis=1).sum()
print (df)
      0   1
Name       
A     5  13
B     3   7
C     7  17
D     6  10
E     6   6
...