Pandas:从作为列表的列创建多个行

时间:2016-11-13 00:56:06

标签: pandas

我们说我有这样的事情:

df = pd.DataFrame({'key':[1,2,3], 'type':[[1,3],[1,2,3],[1,2]], 'value':[5,1,8]})

key type        value
1   [1, 3]      5
2   [1, 2, 3]   1
3   [1]         8

其中一列包含项目列表。 我想为包含多种类型的每一行创建几行。

坚持这个:

key type  value
1   1     5
1   3     5
2   1     1
2   2     1
2   3     1
3   1     8

我一直在使用axis = 1的应用,但是我无法找到一种方法来返回DataFrame每行超过1行。 提取所有不同类型的'然后循环连接似乎很难看。

任何想法? 感谢!!!

1 个答案:

答案 0 :(得分:1)

import itertools
import pandas as pd
import numpy as np

def melt_series(s):
    lengths = s.str.len().values
    flat = [i for i in itertools.chain.from_iterable(s.values.tolist())]
    idx = np.repeat(s.index.values, lengths)
    return pd.Series(flat, idx, name=s.name)


melt_series(df.type).to_frame().join(df.drop('type', 1)).reindex_axis(df.columns, 1)

enter image description here

<强> 设置

df = pd.DataFrame({'key':[1,2,3],
                   'type':[[1,3],[1,2,3],[1,2]],
                   'value':[5,1,8]})
df

enter image description here