DataFrame行和列求和

7
假设我有以下这样的数据框:
     a   b  c  d  e  f
1.   1   5  5  9  2  3
2.   4   7  3  1  4  6
3.   2   3  8  9  2  1 
4.   7   3  1  4  7  11
5.   8   5  4  9  0  3
6.   7   8  4  7  2  1

我想对行和列的4个元素的值求和。例如,这会给我1+5+4+7=17和5+9+3+1=18,2+3+4+6=15,...

输出

       a    b    c
   1.  17   18   15
   2.  18   22   21
   3.  28   27   6

我该如何使用pandas完成这个任务?

2个回答

6

让我们尝试使用einsum

pd.DataFrame(np.einsum('ijkl->ik',df.values.reshape(3,2,3,2)))
Out[101]: 
    0   1   2
0  17  18  15
1  15  22  21
2  28  24   6

1
尝试过 df.rolling(2,axis=1).sum().iloc[:,1::2].rolling(2).sum().iloc[1::2],但可能不如你和 Quang 的方法高效。学到了 einsum +1。 - Ch3steR

5
我们可以尝试使用numpy的reshapesum函数:
a = df.to_numpy()
a.reshape(df.shape[0]//2,2, df.shape[1]//2,2).sum((1,3))

输出:

array([[17, 18, 15],
       [15, 22, 21],
       [28, 24,  6]])

重塑是任意的,然后你选择适当的求和轴吗?如果不是,那么你是如何知道如何重塑的呢? - MasayoMusic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接