如何对 pandas 中每 n 行的列值进行平均

How to average column values every n rows in pandas

你能告诉我如何对第一列中具有相同值的列值进行平均吗,如下所示?我想计算所有列的每 n 行。例如,站点值为“1”的 a1~a6 中所有值的平均值等于 3。(我的数据有很多列和行)

raw = {'site':['1','1','1','1','2','2','2','2'],
       'a1':['1','2','3','4','5','6','7','8'],
       'a2':['2','3','4','5','6','7','8','9'],
       'a3':['2','3','4','5','6','7','8','9'],
       'a4':['2','3','4','5','6','7','8','9'],
       'a5':['2','3','4','5','6','7','8','9'],
       'a6':['2','3','4','5','6','7','8','9']
      }
df_tmp = pd.DataFrame(raw,columns = ['site','a1','a2','a3','a4','a5','a6'])
print(df_tmp)

谢谢

您可以使用:

df.mean(axis=0) # by each row
df.mean(axis=1) # by each column

您还可以执行以下操作:

df[[list_of_columns]].mean(axis=0)
df[[list_of_columns]].mean(axis=1)

您可以使用 df_tmp.iloc[row_index, col_index] 根据索引进行切片,或使用 df_tmp.loc[row_index, list_of_col_name] 使用 col_name 和行索引进行切片。

对于这种情况: df_tmp.loc[0:3,['a1']]returns

  a1
0  1
1  2
2  3
3  4

df_tmp.iloc[0:3,1:5] returns

  a1 a2 a3 a4
0  1  2  2  2
1  2  3  3  3
2  3  4  4  4

要获得平均值,您基本上采用切片 df,然后调用 mean() df_tmp.iloc[0:3,1:5].mean(axis=0) 将计算每个列的平均值。

a1    41.0
a2    78.0
a3    78.0
a4    78.0

要计算整个 sheet 的平均值,您可以这样做...

df_tmp.iloc[0:3,1:5].mean().mean() returns 68.75

IIUC,DataFrame.melt + mean for each site with GroupBy.mean

# df_tmp = df_tmp.astype(int) # get correct result
df_tmp.melt('site').groupby('site')['value'].mean()

或:

# df_tmp = df_tmp.astype(int) # get correct result
df_tmp.set_index('site').stack().groupby(level=0).mean()
#df_tmp.set_index('site').stack().mean(level=0) # .mean(level=0) deprecated 

输出

site
1    3.333333
2    7.333333
Name: value, dtype: float64