Python:在重复日期之间求平均值
我有一个带有Python:在重复日期之间求平均值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有datetime的numpy数组,存储在大小为100的数组a中,如下所示: >>>A[0] datetime.datetime(2011, 1, 1, 0, 0) 其他99个元素是datetime.datetime对象,但很少有重复的,例如 A[55] datetime.datetime(2011, 11, 2, 0, 0) A[56] datetime.datetime(2011, 11, 2, 0, 0) 我有另一个与A大小相同的Temperature
datetime
的numpy数组,存储在大小为100的数组a
中,如下所示:
>>>A[0]
datetime.datetime(2011, 1, 1, 0, 0)
其他99个元素是datetime.datetime
对象,但很少有重复的,例如
A[55]
datetime.datetime(2011, 11, 2, 0, 0)
A[56]
datetime.datetime(2011, 11, 2, 0, 0)
我有另一个与A
大小相同的Temperature
s数组,其值对应于A
行,如下所示:
Temperature[0] = 55
Temperature[55] = 40
Temperature[56] = 50
我试图从A2
中获取一个新数组,该数组仅具有a
中唯一的日期时间,并取相应温度重复的平均值
因此,在这种情况下,我将有A2
,只有1个datetime.datetime(2011,11,2,0,0)
,温度将0.5*(40+50)=45
我尝试将pandas数据透视表用作:
DayLightSavCure = pd.pivot_table(pd.DataFrame({'DateByHour': A, 'Temp': Temperature}), index=['DateByHour'], values=['Temp'], aggfunc=[np.mean])
但错误在于:
ValueError: If using all scalar values, you must pass an index
我确实同意“其他人”的观点,这不需要深入研究熊猫就可以实现。这真是太好了。为Python 3.5+编写(因为
统计信息:
from itertools import groupby
from operator import itemgetter
from random import randint
import datetime
from statistics import mean
# Generate test data
dates = [datetime.datetime(2005, i % 12 + 1, 5, 5, 5, 5) for i in range(100)]
temperatures = [randint(0, 100) for _ in range(100)]
# Calculate averages
## Group data points by unique dates using `groupby`, `sorted` and `zip`
grouped = groupby(sorted(zip(dates, temperatures)), key=itemgetter(0))
##Calculate mean per unique date
averaged = [(key, mean(temperature[1] for temperature in values)) for key, values in grouped]
print(averaged) # List of tuples
#[(datetime.datetime(2005, 1, 5, 5, 5, 5), 65.22222222222223), (datetime.datetime(2005, 2, 5, 5, 5, 5), 60.0),.......
print(dict(averaged)) # Nicer as a dict
{datetime.datetime(2005, 3, 5, 5, 5, 5): 48.111111111111114, datetime.datetime(2005, 12, 5, 5, 5, 5): 43.75, ..........
如果在计算结束时必须有两个单独的列表/迭代器,只需将zip
应用于averaged