1

フィールドの 1 つにパイプで区切られた文字列を含む pandas DataFrame があります。これを 内のリストに分割applyし、DataFrame に追加しました。パイプで区切られた文字列の値の数と内容はさまざまです。

df = DataFrame([{'wibble': 'a', 'pipestring': 'aa|aaa|aaa'}, 
    {'wibble': 'b', 'pipestring': 'bb|bbbb|bbb|bbbbbb'}])

df['pipelist'] = df['pipestring'].map(lambda x: x.split('|'))

私はパンダにかなり慣れていないので、これについては完全に間違っている可能性がありますが、パンダのインデックス作成やその他の (素晴らしい) ツールを利用できるように、複数のインデックス レベルを持つ DataFrame を介してこれをより適切に表現できると思います。しかし、これを行う方法がわかりません。代わりに、私が何をすべきかについての指針/アドバイスをいただければ幸いです。

4

2 に答える 2

2

より具体的にあなたの計算目標は何ですか?

データを分割して結合フレームを作成する方法は次のとおりです

In [44]: x = df['pipestring'].apply(lambda x: pd.Series(x.split('|')))

In [45]: x
Out[45]: 
    0     1    2       3
0  aa   aaa  aaa     NaN
1  bb  bbbb  bbb  bbbbbb

In [46]: df.join(x).set_index(['wibble'])
Out[46]: 
                pipestring                 pipelist   0     1    2       3
wibble                                                                    
a               aa|aaa|aaa           [aa, aaa, aaa]  aa   aaa  aaa     NaN
b       bb|bbbb|bbb|bbbbbb  [bb, bbbb, bbb, bbbbbb]  bb  bbbb  bbb  bbbbbb
于 2013-03-13T17:33:43.327 に答える
0

それを始める最も簡単な方法はstack、データフレームを使用することです。

In [44]: df = df.stack()

In [45]: df.ix[0, 'pipelist']
Out[45]: ['aa', 'aaa', 'aaa']

In [46]: df
Out[46]: 
0  pipestring                 aa|aaa|aaa
   wibble                              a
   pipelist               [aa, aaa, aaa]
1  pipestring         bb|bbbb|bbb|bbbbbb
   wibble                              b
   pipelist      [bb, bbbb, bbb, bbbbbb]

それはあなたがなりたい場所にあなたを連れて行きますか?

于 2013-03-13T17:21:17.707 に答える