熊猫,小组和特定月份的总结

时间:2013-10-27 07:28:06

标签: python pandas sum

我有一个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]等特定月份的总和?

Ty

1 个答案:

答案 0 :(得分:2)

是的,一个看起来很整洁的解决方案是使用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()

该函数获取每个索引值并在Seasons Dictionary中查找月份并返回与月份键对应的值。然后该值成为组名。

或者你可以像你的例子一样使用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操作允许您对所有数据执行相同的操作,而听起来您希望以不同方式调查数据集的不同部分的属性。要做到这一点,最好切片,在这种情况下使用布尔切片。