在Pandas系列中存储groupby组

时间:2013-06-26 08:11:42

标签: python pandas

我正在尝试在Pandas中加入两个数据集。我想要做的是将df2.groupby('BuildingID')的结果放入df1的新系列中。原因是建筑物ID是我将要使用的级别,而ItemID是建筑物内的物品集合。

示例:

df1
BuildingID  Blah    ...
3   'a' ...
4   'b' ...
5   'c' ...
7   'd' ...

df2
ItemID  BuildingID  EnergyID    ...
7   3   2   ...
11  3   11  ...
12  3   12  ...
13  4   2   ...
14  5   12  ...
15  4   10  ...
16  7   2   ...
17  7   3   ...

所以我最终得到以下内容:

df1
DataID  Blah    Grouped
3   'a' <groupby object>
4   'b' <groupby object>
5   'c' <groupby object>
7   'd' <groupby object>

所以我的问题是1,我如何实现这一目标2,这是一个好主意还是有更好的方式来表示这些数据 - 或许每个组中所有标题都带有后缀标题?

1 个答案:

答案 0 :(得分:1)

这可能取决于你接下来要做什么,但我会选择类似的东西:

from StringIO import StringIO
import pandas as pd

indf1 = StringIO("""BuildingID  Blah
3   'a'
4   'b'
7   'c'
7   'd'
7   'x'""")    

indf2 = StringIO("""ItemID  BuildingID  EnergyID
7   3   2
11  3   11
12  3   12
13  4   2
14  5   12
17  4   10
17  7   2
17  7   3
17  7   4""")

df1 = pd.read_csv(indf1, delim_whitespace=True, index_col='BuildingID')
df2 = pd.read_csv(indf2, delim_whitespace=True, index_col='ItemID')

dfboth = df1.merge(df2, right_on='BuildingID', left_index=True, how='left')

dfboth.set_index('BuildingID', append=True, inplace=True)
dfboth.reorder_levels(['BuildingID', 'ItemID'])

                  Blah  EnergyID
BuildingID ItemID               
3          7       'a'         2
           11      'a'        11
           12      'a'        12
4          13      'b'         2
           17      'b'        10
7          17      'c'         2
           17      'c'         3
           17      'c'         4
           17      'd'         2
           17      'd'         3
           17      'd'         4
           17      'x'         2
           17      'x'         3
           17      'x'         4