python - Python pandas 计算多列日期时间的平均值
问题描述
给定一个示例表df
如下,如何计算平均日期TIME1, TIME2, TIME3.
df['AVG_TIME'] = df[['TIME1', 'TIME2', 'TIME3']].mean(axis=1)
这将返回NaN
值
ID TIME1 TIME2 TIME3
0 2018-07-11 2018-07-09 2018-07-12
1 2018-07-12 2018-06-12 2018-07-15
2 2018-07-13 2018-06-13 2018-08-03
3 2019-09-11 2019-08-11 2019-09-01
4 2019-09-12 2019-08-12 2019-09-15
解决方案
这可以按如下方式完成:
import time
import datetime
import pandas as pd
# build the df
c = ['TIME1' , 'TIME2' , 'TIME3']
d = [['2018-07-11', '2018-07-09', '2018-07-12'],
['2018-07-12', '2018-06-12', '2018-07-15'],
['2018-07-13', '2018-06-13', '2018-08-03'],
['2019-09-11', '2019-08-11', '2019-09-01'],
['2019-09-12', '2019-08-12', '2019-09-15']]
df = pd.DataFrame(d, columns=c)
# conversion from dates to seconds since epoch (unix time)
def to_unix(s):
return time.mktime(datetime.datetime.strptime(s, "%Y-%m-%d").timetuple())
# sum the seconds since epoch, calculate average, and convert back to readable date
averages = []
for index, row in df.iterrows():
unix = [to_unix(i) for i in row]
average = sum(unix) / len(unix)
averages.append(datetime.datetime.utcfromtimestamp(average).strftime('%Y-%m-%d'))
df['averages'] = averages
推荐阅读
- laravel - 如何更改 Laravel 集合输出中的某些值
- pandas - 我正在尝试将 DataFrame 中的某些列从浮点数转换为整数
- vue.js - Vue Capacitor Ionic 4 Uncaught TypeError:无法重新定义属性:队列
- php - 提交时表单未发送电子邮件。我错过了什么?
- python-3.x - ValueError:传递了与“cell.state_size”不兼容的“initial_state”
- android - 如果我使用图书馆,我必须对用户说
- java - JSON 响应已使用 Jackson 和 JAX-RS 异常映射器转义引号
- powershell - 是否可以在 Powershell 中自定义详细消息前缀?
- tensorflow - 在同一台机器上安装 Nvidia CUDA ver10 会破坏 CUDA ver9 吗?
- r - 使用一组断点将数据分位数