首页 > 解决方案 > 计算每 5 行特定列的平均值,并在 pandas 数据框中选择另一列的最后一个数据(第五个)

问题描述

我有 pandas df,比如 100 行 4 列。我想每 5 行计算特定列(“值”)的平均值,并选择另一列(“日期”)的最后一个数据(第五个)以保留在新的数据框中。我怎样才能做到这一点?

我的数据框看起来像这样:

>>df
          Date     Product     Location       Value
0   12-08-2018           A           S1       1.313
1   12-08-2018           B           S1       3.089
2   12-08-2018           C           S1       1.890
3   12-08-2018           D           S1       3.136
4*  12-08-2018           E           S1       3.258
5   13-08-2018           F           S1       3.113
6   13-08-2018           G           S1       2.651
7   13-08-2018           H           S1       2.135
8   13-08-2018           I           S1       1.555
9*  14-08-2018           J           S1       2.009
10  14-08-2018           K           S1       1.757
11  14-08-2018           L           S1       1.808
12  14-08-2018           M           S1       1.511
13  15-08-2018           N           S1       2.265
14* 15-08-2018           O           S1       2.356

我想把它变成新的数据框,如下所示:

>> new_df
      Date           Value
0  12-08-2018       2.5372
1  14-08-2018       2.2926
2  15-08-2018       1.9394

你能帮我吗?

注意:我添加 * 以便于每 5 行观察一次。

标签: pythonpython-2.7pandasdataframe

解决方案


使用groupbywith aggregate by aggwithlastmeanwith np.arangewith floor 除法 by 5

df = df.groupby(np.arange(len(df)) // 5).agg({'Date':'last', 'Value':'mean'})
print (df)
         Date   Value
0  12-08-2018  2.5372
1  14-08-2018  2.2926
2  15-08-2018  1.9394

如果默认RangeIndex解决方案应该简化:

df = df.groupby(df.index // 5).agg({'Date':'last', 'Value':'mean'})

详情

print (np.arange(len(df)) // 5)
[0 0 0 0 0 1 1 1 1 1 2 2 2 2 2]

推荐阅读