为pandas DataFrame添加维度

1 投票
2 回答
8800 浏览
提问于 2025-04-17 18:57

我有一个 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

撰写回答