2016-08-20 54 views
0

GROUPBY我无法理解的代码:大熊猫是lambda参数

pivot = pd.pivot_table(subset, values='count', rows=['date'], cols=['sample'], fill_value=0) 

by = lambda x: lambda y: getattr(y, x) 

grouped = pivot.groupby([by('year'),by('month')]).sum() 

subset的代码是一个数据帧已列名为“日期”(eg2013-02-04 06:20: 49.634244),并且没有名为“年”和“月”的列。

在那里我有与

  • “年” 麻烦我想不通和 “月”:

    grouped = pivot.groupby([by('year'),by('month')]).sum() 
    
  • 什么的

    意义
    grouped = pivot.groupby([by('year'),by('month')]).sum() 
    

我做了什么:

  • 在大熊猫pandas document说:在pandas.DataFrame.groupby的第一parame可以

    借:映射函数/名单函数,字典,系列或元组/

  • by = lambda x:lamb DA Y:GETATTR(Y,X)

手段( '巴')返回,从一个对象。如果一个可调用被传递到返回属性 '栏'

+0

你能后的样本数据为'subset' DF设置?例如,如果你在'subset'['sample']'列中有'year'和'month'__values__,那么你将在这些列之后有这样的列... – MaxU

+1

[如何制作好可重复的熊猫示例](http:///stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) – MaxU

回答

1

的函数groupby,它在DataFrame的索引上被调用,所以这个代码是按日期时间索引的年份和月份分组的。

In [55]: df = pd.DataFrame({'a': 1.0}, 
          index=pd.date_range('2014-01-01', periods=13, freq='M')) 

In [56]: df.groupby([by('year'), by('month')]).sum() 
Out[56]: 
      a 
2014 1 1.0 
    2 1.0 
    3 1.0 
    4 1.0 
    5 1.0 
    6 1.0 
    7 1.0 
    8 1.0 
    9 1.0 
    10 1.0 
    11 1.0 
    12 1.0 
2015 1 1.0 

更明确地

In [57]: df.groupby([df.index.year, df.index.month]).sum() 
Out[57]: 
      a 
2014 1 1.0 
    2 1.0 
    3 1.0 
    4 1.0 
    5 1.0 
    6 1.0 
    7 1.0 
    8 1.0 
    9 1.0 
    10 1.0 
    11 1.0 
    12 1.0 
2015 1 1.0