我有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行添加*以便于观察。
答案 0 :(得分:1)
将groupby
与agg
与last
一起使用,将mean
与np.arange
并将底数除以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]