潘达斯:每k列相加

问题描述 投票:0回答:1

我有一个数据框,我怎样才能得到每一个K列的数据总和,比如说,我从

   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循环来实现?

python pandas dataframe data-manipulation
1个回答
1
投票

你可以使用整数除法 // 用助记数组按列数长度排列,并传递给 groupbyaxis=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

3
投票

你可以用 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
© www.soinside.com 2019 - 2024. All rights reserved.