熊猫,groupby和特定月份的求和

斯塔夫罗斯·阿纳斯塔西亚迪斯(Stavros Anastasiadis)

我有一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章