我无法理解代码:
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
是一个DataFrame,其中有一个名为“date”的列(例如2013-02-04 06:20:49.634244),并且没有名为“year”和“month”的列
我遇到麻烦
我无法弄清楚:“年份”和“月份”:
grouped = pivot.groupby([by('year'),by('month')]).sum()
的含义是什么
grouped = pivot.groupby([by('year'),by('month')]).sum()
我做了什么:
在pandas pandas document中说:pandas.DataFrame.groupby的第一个参数可以是
by:映射函数/函数列表,dict,Series或tuple /
by = lambda x:lambda y:getattr(y,x)
表示by('bar')返回一个从对象
返回属性'bar'的函数
答案 0 :(得分:1)
如果将callable传递给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