Python 熊猫:每k列汇总一次

Python 熊猫:每k列汇总一次,python,pandas,dataframe,data-manipulation,Python,Pandas,Dataframe,Data Manipulation,我有一个数据帧,如何才能得到每K个cloumn的列和 例如,从 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

我有一个数据帧,如何才能得到每K个cloumn的列和 例如,从

   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循环的情况下,有什么方法可以做到这一点吗?

您可以使用带辅助数组的整数除法
/
,按列的长度,通过
axis=1
传递到
groupby
,并使用聚合
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

您可以将整数除以
/
与按列长度的辅助数组一起使用,并通过聚合
求和传递到
groupby
axis=1

#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
可以在窗口大小为2的轴1上使用

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
可以在窗口大小为2的轴1上使用

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