我有一个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可以更好地表示这一点,因此我可以利用熊猫的索引和其他(神话般的)工具。但是我无法弄清楚如何做到这一点。关于我应该做什么的任何指示/建议都非常赞赏。
答案 0 :(得分: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
答案 1 :(得分: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]
这会让你到达目的地吗?