熊猫:创建从一个列表

问题描述:

列几行

比方说,我有这样的事情:熊猫:创建从一个列表

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 

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

Ontaining这样的:

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

我一直在玩与轴= 1适用,但我不能找到一种方法,每个数据帧的行返回超过1行。 提取所有不同的'类型',然后循环连接似乎是丑陋的。

有什么想法? 谢谢!

+0

循环连击是要走的路。如果你不愿意这样做,因为它“看起来很丑”,那么真正的丑陋的东西就是首先在列中建立一个列表的数据框。避免先建立这样的列是正确的路,你的问题将很好地消失。 – Boud

+0

我继承了DataFrame :)我会尝试循环concat方法。 – user3635284

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