2014-01-16 1 views
1

Мне нравится использовать вложенные структуры данных, и теперь я пытаюсь понять, как использовать ПандаColletting элемент из разных DataFrames в массивы

Вот это игрушка модель:

a=pd.DataFrame({'x':[1,2],'y':[10,20]}) 
b=pd.DataFrame({'x':[3,4],'y':[30,40]}) 
c=[a,b] 

теперь я хотел бы получить:

sol=np.array([[[1],[3]],[[2],[4]]]) 

у меня есть идея, чтобы получить как sol[0] и sol[1] как:

s0=np.array([item[['x']].ix[0] for item in c]) 
s1=np.array([item[['x']].ix[1] for item in c]) 

но, чтобы получить золь я побежал бы по индексу, и я не думаю, что это действительно вещий ...

ответ

1

Похоже, что вы хотите только те столбцы из xa и b. Вы можете объединить две серии (или DataFrames) в новый DataFrame с помощью pd.concat:

In [132]: pd.concat([a['x'], b['x']], axis=1) 
Out[132]: 
    x x 
0 1 3 
1 2 4 

[2 rows x 2 columns] 

Теперь, если вы хотите Numpy массив, используйте values attribute:

In [133]: pd.concat([a['x'], b['x']], axis=1).values 
Out[133]: 
array([[1, 3], 
     [2, 4]], dtype=int64) 

И если вы хотите Numpy массив с одной и той же формы, как и sol, а затем использовать reshape method:

In [134]: pd.concat([a['x'], b['x']], axis=1).values.reshape(2,2,1) 
Out[134]: 
array([[[1], 
     [3]], 

     [[2], 
     [4]]], dtype=int64) 

In [136]: np.allclose(pd.concat([a['x'], b['x']], axis=1).values.reshape(2,2,1), sol) 
Out[136]: True 
+0

Это выглядит хорошо, но я до сих пор есть сомнения, так как я хотел бы использовать литиево st c, а не его элементы. – user2988577

+1

Затем используйте 'pd.concat ([df ['x'] для df в c], axis = 1)'. – unutbu

 Смежные вопросы

  • Нет связанных вопросов^_^