2017-01-28 7 views
2

一連のデータフレーム配列からタプルを含むデータフレームを作成する必要があります。私に必要なのは以下の通りです:各要素を持つパンダデータフレームを他のデータフレームから作成したタプル

私はデータフレームabを持っている:

a = pd.DataFrame(np.array([[1, 2],[3, 4]]), columns=['one', 'two']) 
b = pd.DataFrame(np.array([[5, 6],[7, 8]]), columns=['one', 'two']) 

a: 
    one two 
0 1 2 
1 3 4 

b: 
    one two 
0 5 6 
1 7 8 

私は各要素が対応するの要素とBから形成されたタプルであるデータフレームa_bを作成したい、すなわち

a_b = pd.DataFrame([[(1, 5), (2, 6)],[(3, 7), (4, 8)]], columns=['one', 'two']) 

a_b: 
     one  two 
0 (1, 5) (2, 6) 
1 (3, 7) (4, 8) 

理想的には、任意の数のデータフレームでこれを行いたいと考えています。 私はあなたがnumpy.rec.fromarrays((a.values, b.values)).tolist()を使用することができるのpython 3

答えて

1

を使用していますサイクル のために使用するよりもエレガントな方法があった期待していた。

In [36]: pd.DataFrame(np.rec.fromarrays((a.values, b.values, a.values)).tolist(), 
         columns=a.columns, 
         index=a.index) 
Out[36]: 
     one  two 
0 (1, 5, 1) (2, 6, 2) 
1 (3, 7, 3) (4, 8, 4) 

:3 DFさんをマージ

In [34]: pd.DataFrame(np.rec.fromarrays((a.values, b.values)).tolist(), 
         columns=a.columns, 
         index=a.index) 
Out[34]: 
     one  two 
0 (1, 5) (2, 6) 
1 (3, 7) (4, 8) 

は、更新:

あなたがデータフレームの数を事前に知らないとしたら、どうすれば でしょうか?

In [60]: dfs = [a,b,a] 

In [62]: tuple_of_dfs = (x.values for x in dfs) 

In [63]: pd.DataFrame(np.rec.fromarrays(tuple_of_dfs).tolist(), columns=a.columns, index=a.index) 
Out[63]: 
     one  two 
0 (1, 5, 1) (2, 6, 2) 
1 (3, 7, 3) (4, 8, 4) 
+0

感謝を使用することができ、これは素晴らしい作品が、あなたはどのように行うだろう、事前にデータフレームの番号がわからないと仮定? – gionni

+0

@gionni、更新セクションを参照してください – MaxU

+0

ありがとうたくさん!!!! ;) – gionni

0

あなたはaの列の上にzipb

In [31]: pd.DataFrame({x: zip(a[x], b[x]) for x in a.columns}) 
Out[31]: 
     one  two 
0 (1, 5) (2, 6) 
1 (3, 7) (4, 8) 
関連する問題