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