2017-08-02 123 views

回答

5

一種選擇是獲取每個數據幀的值,重塑,與np.hstack連接,然後分配給新的數據幀。

In [533]: pd.DataFrame(np.hstack((df1.A.values.reshape(-1, 1),\ 
            df2.B.values.reshape(-1, 2))).reshape(-1,),\ 
         columns=['A']) 
Out[533]: 
    A 
0 0 
1 3 
2 3 
3 1 
4 4 
5 4 
6 2 
7 5 
8 5 

pd.concatdf.stack另一種解決方案:

In [622]: pd.DataFrame(pd.concat([df1.A, pd.DataFrame(df2.B.values.reshape(-1, 2))], axis=1)\ 
          .stack().reset_index(drop=True),\ 
         columns=['A']) 
Out[622]: 
    A 
0 0 
1 3 
2 3 
3 1 
4 4 
5 4 
6 2 
7 5 
8 5 
+0

感謝您的回覆,有沒有在大熊貓一些內置的方法可以做到這一點? – danche

+0

@danche你想要什麼是很好的利基。有'pd.concat',但不能任意交織系列。 –

+0

或者也許可以考慮'reset_index' – Wen

2

也許這一個?

A=len(df1)+len(df2) 
df1.index=(list(range(0, A,3))) 
df2.index=list(set(range(0, A))-set(range(0, A,3))) 
df2.columns=['A'] 
df=pd.concat([df1,df2],axis=0).sort_index() 

df 
Out[188]: 
    A 
0 0 
1 3 
2 3 
3 1 
4 4 
5 4 
6 2 
7 5 
8 5 
+0

好的和有創造性的! –

+0

@cᴏʟᴅsᴘᴇᴇᴅ謝謝〜但它不是很整潔...,還是你的回答好多了〜 – Wen

+0

不錯的答案+1( - : – piRSquared

3

設置
考慮dataframes從toolz
訣竅ab

a = pd.DataFrame(dict(A=range(3))) 
b = pd.DataFrame(dict(B=np.arange(3).repeat(2) + 3)) 

解決方案
使用interleaveb分成的兩個參數

from cytoolz import interleave 

pd.Series(list(interleave([a.A, b.B[::2], b.B[1::2]]))) 

0 0 
1 3 
2 3 
3 1 
4 4 
5 4 
6 2 
7 5 
8 5 
dtype: int64 

這是@root's answermy question

+0

啊cytoolz再次。 –

0

如果我們首先分割爲len的(a)的陣列和b爲len(b)中的兩個陣列,我們可以壓縮在一起,疊層的變形例並連接。

a = np.split(dfa.A.values,len(dfa.A)) 
b = np.split(dfb.B.values,len(dfb.B)/2) 

c = np.concatenate(np.hstack(list(zip(a,b)))) 

pd.Series(c) 

返回:

0 0 
1 3 
2 3 
3 1 
4 4 
5 4 
6 2 
7 5 
8 5 
dtype: int64