熊猫groupby获取月份和年份的值

时间:2018-12-22 15:28:20

标签: python pandas group-by

我有以下数据框(2016、2017、2018年有50000行):

data.head()
             Values
Date              
2016-07-20    10.0
2016-07-20    10.0
2016-07-22     1.0
2016-07-22     1.0
2016-07-22     1.0

简单的groupby

data.groupby([(data1.index.year==2018),(data1.index.month==5)])['Values'].sum()

False  False   1461787.35
       True      80714.53
True   False    862589.66
       True     172600.04
Name: Values, dtype: float64

如何将FalseTrue中的yearmonth更改为2018和5?

预期输出:

    2018     5   80714.53
    Name: Values, dtype: float64

1 个答案:

答案 0 :(得分:2)

您仅需要按yearmonth s进行分组:

#changed data for better sample
print (data)

            Values
Date              
2015-07-20    10.0
2015-05-20    20.0
2016-05-20     2.0
2018-05-22     1.0
2018-05-22     3.0
2018-07-22     4.0

df1 = data.groupby([data.index.year, data.index.month])['Values'].sum()
print (df1)
Date  Date
2015  5       20.0
      7       10.0
2016  5        2.0
2018  5        4.0
      7        4.0
Name: Values, dtype: float64

您的解决方案按布尔掩码分组,True仅过滤了2018年,并且False都是非2018行,类似于month s:

df2 = data.groupby([(data.index.year==2018),(data.index.month==5)])['Values'].sum()
print (df2)
False  False    10.0
       True     22.0
True   False     4.0
       True      4.0
Name: Values, dtype: float64

如果仅希望使用过滤后的值,请使用:

df = data[(data.index.year==2018) & (data.index.month==5)]
print (df)
            Values
Date              
2018-05-22     1.0
2018-05-22     3.0

out = df.groupby([df.index.year, df.index.month])['Values'].sum()
print (out)
Date  Date
2018  5       4.0
Name: Values, dtype: float64