【问题标题】:Calculate mean every 5 rows specific column and select last data (fifth) of another column in pandas dataframe计算每 5 行特定列的平均值,并在 pandas 数据框中选择另一列的最后一个数据(第五个)
【发布时间】:2018-08-06 04:43:07
【问题描述】:

我有 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 行添加 *。

【问题讨论】:

  • 对不起先生。 @Harsh 帕特尔。我是堆栈溢出的初学者,我的英语语言技能很弱。我使用谷歌翻译来帮助我。我会成为你的指导来提高自己。我是泰国人。如果您知道使用 stackoverflow 提出任何问题或答案的视频教程。你能把链接放在这里吗?非常感谢。

标签: python python-2.7 pandas dataframe


【解决方案1】:

groupbyagglastmeannp.arange5 的地板分割一起使用:

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]

【讨论】:

  • 非常感谢您对我的帮助。但结果是切换列。 new_df 第一列的 "Value" 和第二列的 "Date" 。如何切换列??
  • @kanpiseksasuk - 你可以使用df = df[['Date','Value']]
  • 还有别的办法吗?因为我的代码中有太多的数组和行。
  • @kanpiseksasuk - 你可以将Orderdict 传递给agg,比如OrderedDict([('Date', 'last'), ('Value', 'mean')]),检查docs
  • 我刚刚注意到我的数据是每 5 行的平均值,但最后一个具有 1、2、3、4 行的数据是相同的平均值。我希望我的数据平均每 5 行。如果不是 5 行,则不要平均。你有办法做到这一点吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 2021-12-12
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多