2016-11-13 143 views
1
列幾行

比方說,我有這樣的事情:熊貓:創建從一個列表

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

回答

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