我有一个数据框,我怎样才能得到每一个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循环来实现?
你可以使用整数除法 //
用助记数组按列数长度排列,并传递给 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
你可以用 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