0

我正在尝试在 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,这是一个好主意还是有更好的方法来表示这些数据 - 也许每个组中的所有标题都带有后缀标题?

4

1 回答 1

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
于 2013-06-26T09:23:46.697 回答