0

Pandas で 2 つのデータセットを結合しようとしています。私がやりたいことは、 の結果を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 に答える