Python 平均数据帧中的切片数

Python 平均数据帧中的切片数,python,python-3.x,pandas,dataframe,average,Python,Python 3.x,Pandas,Dataframe,Average,我有一个数据帧: df = pd.DataFrame({0: [1, 2, 5, 13], 1: [1, 4, 3, 1], 2: [1, 2, 5, 10], 3: [4, 4, 5, 3], 4: [0, 6, 1, 1], 5: [5, 6, 4, 5], 6: [0, 9, 9, 0], 7: [1, 1, 1, 1]}) df 0 1 2 3 4 5 6 7 1 1 1 4 0 5 0 1 2 4 2 4 6

我有一个数据帧:

df = pd.DataFrame({0: [1, 2, 5, 13], 1: [1, 4, 3, 1], 2: [1, 2, 5, 10], 3: [4, 4, 5, 3], 4: [0, 6, 1, 1], 5: [5, 6, 4, 5], 6: [0, 9, 9, 0], 7: [1, 1, 1, 1]})

df

0   1   2   3   4   5   6   7
1   1   1   4   0   5   0   1
2   4   2   4   6   6   9   1
5   3   5   5   1   4   9   1
13  1   10  3   1   5   0   1
我想取每2个并排元素的平均值,但每4列进行切片(average1=列0、1、2、3、average2=列1、2、3、4、average3=列2、3、4、5…等等)

例如,伪代码是:

for index in range(len(df.columns)):
  df_1 = df.iloc[:index, index:index+1]
  df_2 = df.iloc[:index, index+2:index+3]
  df_avg = pd.concat([df_1, df_2]).mean(axis=1)
我想要的结果是:

df_avg

(1+1+1+4)/4    (1+1+4+0)/4  . . . .  (0+5+0+1)/4
(4+2+4+6)/4    (4+2+4+6)/4  . . . .  (6+6+9+1)/4
.
.
.
(13+1+10+3)/4  (1+10+3+1)/4  . . . .  (1+5+0+1)/4



df_avg

1.75   1.50 . . . . 1.50
4.00   4.00 . . . . 5.50
6.75   3.75 . . . . 1.75

使用groupby().mean()或可能的.rolling().mean()方法是否有一种简单的方法可以做到这一点?

IIUC
rolling
with
mean

df_ave=df.rolling(4,axis=1).mean().dropna(1)
df_ave
Out[100]: 
      3     4     5     6     7
0  1.75  1.50  2.50  2.25  1.50
1  3.00  4.00  4.50  6.25  5.50
2  4.50  3.50  3.75  4.75  3.75
3  6.75  3.75  4.75  2.25  1.75
第一次分裂

df1, df2 = [y for _, y in df.groupby(df.columns//4,axis=1)]
(df1.rolling(2,axis=1).mean().dropna(1).values + df2.rolling(2,axis=1).mean().dropna(1).values)/2
Out[112]: 
array([[1.75, 1.75, 1.5 ],
       [4.5 , 5.25, 4.  ],
       [3.25, 5.25, 5.  ],
       [5.  , 4.  , 3.5 ]])

这偏离了原始帖子的轨道,但是如果我想要第0、1、10、11列,然后是第1、2、11、12列……等等——那么每10个远离的列,而不是并排的列呢?@HelloToEarth你能解释更多关于1、2、10、11逻辑的内容吗?@HelloToEarth这更像是selft\u定义步长,那么我们需要在这里循环,如果我们假设数据框的列数可以被11整除,那么不能通过滚动来减少——我只想简单地取4个元素的片段(2个元素从0开始,1,下2个元素从10开始,11一直到数据框的末尾);这与上面的逻辑完全相同,但不是每4个元素并排滚动一次,而是得到彼此相距10列的切片。@HelloToEarth将数据帧拆分为两个,然后每个数据帧都做滚动平均值,加起来做平均值就是实际数据的样子吗?如果是这样的话,Pandas可能不是合适的数据结构。