来自groupby的pandas中的多列连接

时间:2014-08-29 16:59:14

标签: python pandas

我有一个大型数据框和一个小型数据框,我想加入其中。小数据帧保持与组中较大数据帧中的值范围对应的最大每周值。我想将每组每周的最大值加入到大框架中。

大框架:

L
datetime     group    value
2014-05-07   A        3 
2014-05-07   B        3 
2014-05-14   A        4 
2014-05-14   B        2 
2014-05-15   A        6 
2014-05-15   B        4 
2014-05-16   A        7 
2014-05-16   B        10

小框架:

S
weeknumber   group    maxval
1            A        3
1            B        3
2            A        7
2            B        10

请注意,这些是假设的周值,实际值将与52中的一周中的周数相对应。

要计算小框架,我们可以在日期时间设置索引:

import pandas as pd
L.index = pd.to_datetime(L.datetime)

我们可以按小组和周分组:

week = L.groupby([(lambda x : x.week),'group'], as_index=False)

计算每周最大值很简单:

weekmax = week.value.max()

这会返回小框架,是我卡住的地方。我尝试合并数据框并执行连接,但无法使其工作。

编辑: 这就是我希望最后一帧在连接后的样子:

datetime     group    value    maxval
2014-05-07   A        3        3
2014-05-07   B        3        3
2014-05-14   A        4        7
2014-05-14   B        2        10
2014-05-15   A        6        7
2014-05-15   B        4        10
2014-05-16   A        7        7
2014-05-16   B        10       10

1 个答案:

答案 0 :(得分:2)

您希望使用transform,它将返回聚合的索引类似版本。所以你可以直接回到更大的框架,如下所示:

In [189]: L['maxval'] = week['value'].transform('max')

In [190]: L
Out[190]: 
              datetime group  value  maxval
datetime                                   
2014-05-07  2014-05-07     A      3       3
2014-05-07  2014-05-07     B      3       3
2014-05-14  2014-05-14     A      4       7
2014-05-14  2014-05-14     B      2      10
2014-05-15  2014-05-15     A      6       7
2014-05-15  2014-05-15     B      4      10
2014-05-16  2014-05-16     A      7       7
2014-05-16  2014-05-16     B     10      10