我的groupby.groups的结果返回:
{(2014, 36): [2], (2014, 41): [3, 4], (2013, 10): [0], (2014, 48): [5], (2014, 37): [1]}
我想将其转换为如下所示的数据框:
2013 2014
10 1 0
36 0 1
37 0 1
41 0 2
48 0 1
-添加-这是我的工作流程到groupby.groups结果中:
def tr_epoch(epoch):
y,wn,dn = epoch.isocalendar()
return y, wn
d = [1362826800, 1410260400, 1409828400, 1412766000, 1412769600, 1417262400 ]
l = map(lambda x: tr_epoch(datetime.datetime.fromtimestamp(x)), d)
df = pd.DataFrame(l, columns=['year','week_idx'])
res = df.groupby(['year','week_idx']).groups
-以pythonic方式添加-使用迭代,我会做:
def to_dict(k,v):
yr, wk = k
return {'week': wk, yr: len(v)}
data = map(lambda(k,v): to_dict(k,v), res.iteritems())
df = pd.DataFrame.from_records(data, index='week').fillna(0).sort()
但我敢肯定,有一种熊猫方法。
因此,您要计算每个组的大小?然后,您可以执行以下操作:
In [31]: df.groupby(['year','week_idx']).size()
Out[31]:
year week_idx
2013 10 1
2014 36 1
37 1
41 2
48 1
dtype: int64
为了将其重塑为预期的输出,我们现在可以使用unstack
将“年”索引级别从行移动到列(并fillna
用于获取0):
In [33]: df.groupby(['year','week_idx']).size().unstack(0).fillna(0)
Out[33]:
year 2013 2014
week_idx
10 1 0
36 0 1
37 0 1
41 0 2
48 0 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句