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('|'))

我对 pandas 很陌生,所以对此可能完全错误,但我认为这可以通过具有多个索引级别的 DataFrame 更好地表示,这样我就可以利用 panda 的索引和其他(极好的)工具。但是我无法弄清楚如何做到这一点。任何关于我应该做什么的指示/建议都非常感谢。

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 回答