为pandas DataFrame添加维度
我有一个 pandas 的数据表(DataFrame),其中有一个字段是用管道符号(|)分隔的字符串。我把这个字符串拆分成了一个列表,并通过 apply
方法把它添加到了数据表中。不过,这个用管道符号分隔的字符串里的值的数量和内容都是不一样的。
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 还不是很熟悉,所以可能理解得不太对,但我觉得用一个有多个索引层级的数据表来表示这些数据会更好,这样我就可以利用 pandas 的索引功能和其他很棒的工具了。不过,我不知道该怎么做。希望能得到一些建议或者指导,告诉我应该怎么做。
2 个回答
0
开始这个的最快方法就是把你的数据框进行“堆叠”。
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]
这样做能帮你达到想要的效果吗?
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