2014-10-10 44 views
2

,我有以下數據:數據框中建築通過彙總列表

X = [8.5,9.48,8.65,8.16,8.83,7.76,8.63] 
Y = [8.27,8.20,8.25,8.14,9.00,8.10,7.20,8.32,7.70] 

,並希望有數據框:

serie value 
0  X 8.50 
1  X 9.48 
2  X 8.65 
3  X 8.16 
4  X 8.83 
5  X 7.76 
6  X 8.63 
7  Y 8.27 
8  Y 8.20 
9  Y 8.25 
10  Y 8.14 
11  Y 9.00 
12  Y 8.10 
13  Y 7.20 
14  Y 8.32 
15  Y 7.70 

眼下是這樣進行:

import pandas as pd 

lst = ['X']*len(X) 
lst.extend(['Y']*len(Y)) 
X.extend(Y) 

df = pd.DataFrame({"value":X, "serie":lst}) 

但我不知道是否有一種(更pythonic?)的方式來融化?

回答

5

你可以建立DataFrames的名單X和Y然後用ignore_index組串連到True

>>> xdf = pd.DataFrame({'value': X, 'serie': 'X'}) 
>>> ydf = pd.DataFrame({'value': Y, 'serie': 'Y'}) 
>>> pd.concat([xdf, ydf], ignore_index=True) 
    serie value 
0  X 8.50 
1  X 9.48 
2  X 8.65 
3  X 8.16 
4  X 8.83 
5  X 7.76 
6  X 8.63 
7  Y 8.27 
8  Y 8.20 
... 
+0

謝謝!我確實忘記了concat,這個答案非常明確! – 2014-10-10 13:30:24

1

你可以建立在構造函數中的字典內嵌到數據幀:

In [246]: 

pd.DataFrame({'serie':['X']*len(X) + ['Y']*len(Y), 'value':X+Y}) 
Out[246]: 
    serie value 
0 X  8.50 
1 X  9.48 
2 X  8.65 
3 X  8.16 
4 X  8.83 
5 X  7.76 
6 X  8.63 
7 Y  8.27 
8 Y  8.20 
9 Y  8.25 
10 Y  8.14 
11 Y  9.00 
12 Y  8.10 
13 Y  7.20 
14 Y  8.32 
15 Y  7.70 
2

這是一個小更高效,更簡潔:

df = pd.DataFrame({'value': X+Y, 'serie': 'Y'}) 
df['serie'][0:len(X)] = 'X' 
+0

Thnanks爲第正在接近!作爲供參考的 – 2014-10-10 13:31:30

+1

。這是一個鏈式賦值,並且不會在一般情況下工作(並且會顯示「SettiWithCopyWarning/Error」,最好做:''df.ix [0:len(X),'seris'] ='X'' ' – Jeff 2014-10-10 14:45:49