是的,我认为一个看起来很不错的解决方案是使用Seasons字典,然后使用函数对数据进行分组。任何作为组键传递的函数都将每个索引值调用一次,并将返回值用作组名称。
import pandas as pd
import numpy as np
from pandas import DataFrame
import datetime
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)
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'}
def GroupFunc(x):
return SeasonDict[x.month]
Grouped = DF.groupby(GroupFunc)
Grouped.sum()
该函数获取每个索引值并在Seasons字典中查找月份,返回对应于月份键的值。然后该值成为分组名称。
另外,您可以像您的示例中那样使用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操作允许您对所有数据执行相同的操作,而听起来您想以不同的方式研究数据集的不同部分的属性。为了做到这一点,最好使用布尔切片进行切片。