python - 计算每 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 行观察一次。
解决方案
使用groupby
with aggregate by agg
withlast
和mean
with np.arange
with 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]
推荐阅读
- powershell - SCOM Powershell如何访问IP地址、网络和默认IP网关
- python - Python - 尝试识别文件夹列表中未使用的最低数量
- c++ - 在 macOS 上使用 libcurl 库在项目中编译 c++
- nginx - 无法使用与 Tor 连接的 PHPMailer 发送电子邮件。收到 SMTP 错误:无法连接到服务器:php_network_getaddresses。如何解决这个问题?
- php - 这个 js.php 文件是什么意思
- firebase - 无法将资产从 Firebase 存储加载到统一
- php - 为什么默认禁用 PHP ZTS?
- c - 访问 struct C 中的 char* 或 char 数组
- python - 如何获取当前登录 Flask-Login 的用户列表?
- python - Python用指针遍历列表