将尺寸添加到熊猫DataFrame
问题描述:
我有一个熊猫DataFrame,其中包含一个管道分隔的字符串在其中一个字段中。我将它分成了一个apply
内的列表,并将其添加到DataFrame中。管道分隔字符串中值的数量和内容各不相同。将尺寸添加到熊猫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('|'))
我是很新,大熊猫所以可能是完全错误的这一点,但我认为这将通过与多个指数水平的数据帧进行更好的体现,所以我可以利用熊猫的索引和其他(精彩)工具。但我无法弄清楚如何做到这一点。任何指针/建议我应该做什么,而非常感激。
答
更具体的是你的计算目标是什么?
这里有多达分割你的数据,并创建一个综合框架
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
答
最快的方式开始使用那就是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]
这是否让你要呢?
+0
对不起的方式,我明明没有解释自己很清楚。我试图添加额外的列到我的DataFrame(由转换'pipestring'得到的列表确定),而不是重构DataFrame。 (基本上在@杰夫的答案。) – meloncholy 2013-03-13 19:28:53
谢谢 - 这正是我想要做的。我唯一的问题(再次请原谅我的无知)是我必须将系列丛书转换成列表,然后再返回到熊猫来格式化输出中的东西(否则我得到了一个DataFrame系列)'x = DataFrame(list(df ['pipestring'] .application(lambda x:pd.Series(x.split('|')))))'再次感谢! – meloncholy 2013-03-13 19:25:04
这应该适用于0.10.1或> – Jeff 2013-03-13 20:19:22
您是对的。我没有意识到,但我正在运行0.9.1。现在更新... – meloncholy 2013-03-13 20:45:34