我有一个DataFrame:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 982 entries, 2009-10-30 00:00:00 to 2012-12-16 00:00:00
Data columns (total 4 columns):
rain 981 non-null values
temp_max 982 non-null values
temp_min 982 non-null values
temp 982 non-null values
dtypes: float64(4)
对于每年/每月的总计,我使用:
mdata = data.groupby([lambda x: x.year, lambda x: x.month]).agg([sum])
但是我需要进行季节性分析(夏季,冬季等),因此如何创建特定年份的总和,例如每年的[1、2、3]?
泰
是的,对我来说似乎很整洁的一种解决方案是使用Seasons字典,然后使用函数对数据进行分组。每个索引值都会调用一次作为组键传递的任何函数,并将返回值用作组名。
import pandas as pd
import numpy as np
from pandas import DataFrame
import datetime
# Create a year's worth of data
base = datetime.date.today() - datetime.timedelta(365)
Datelist = [base + datetime.timedelta(days = x) for x in range(365)]
DF = DataFrame(np.random.rand(365), index = Datelist)
# Create a Seasonal Dictionary that will map months to seasons
SeasonDict = {11: 'Winter', 12: 'Winter', 1: 'Winter', 2: 'Spring', 3: 'Spring', 4: 'Spring', 5: 'Summer', 6: 'Summer', 7: 'Summer', \
8: 'Autumn', 9: 'Autumn', 10: 'Autumn'}
# Write a function that will be used to group the data
def GroupFunc(x):
return SeasonDict[x.month]
# Call the function with the groupby operation.
Grouped = DF.groupby(GroupFunc)
Grouped.sum()
该函数获取每个索引值,并在“季节字典”中查找月份,然后返回与月份键对应的值。然后,该值成为组名。
另外,您也可以像示例中那样使用lambda(效率更高,但我认为上面的内容更容易理解):
DF.groupby(lambda x: SeasonDict[x.month]).sum()
每个注释的附加代码在我看来,切片数据会更好。因此,您可以执行以下操作
DF['Season'] = ""
for row in DF.index:
DF.Season[row] = SeasonDict[row.month]
DFWinter = DF[DF.Season == 'Winter']
现在,您有了一个包含冬季数据的新数据框,可以根据需要进行操作。区别在于,groupby操作允许您对所有数据执行相同的操作,而听起来您想以不同的方式调查数据集不同部分的属性。为此,最好使用布尔切片来切片。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句