如何将来自许多数据帧的数据组合成一个数据帧,并将数组作为数据值

时间:2013-09-18 18:38:43

标签: python numpy pandas

如果我有许多panda数据帧,具有相同的索引结构,我想创建一个具有相同索引结构的数据帧,但数据值是np.arrays(实际上我想要np.matrix。)

合并似乎可以很好地完成简单的操作df1 + df2添加了元素,但是np.array((df1,df2))根本不能做我想要的。

pandas是否有一种方法可以在不按元素重建整个对象元素的情况下执行此操作?

E.g。如果我有

df1 =       col1    col2
      1        1       2
      2        3       4
df2 =       col1    col2
      1        5       6
      2        7       8

并希望

df2 =       col1    col2
      1    [1,5]   [2,6]
      2    [3,7]   [4,8]

1 个答案:

答案 0 :(得分:4)

我会使用Panel结构来执行此操作:

In [11]: p = pd.Panel({'df1': df1, 'df2': df2})

In [12]: p['df1']
Out[12]:
   col1  col2
1     1     2
2     3     4

你可以在主轴上申请:

In [13]: p.apply(np.sum, axis='major')  # use linalg function here instead of np.sum
Out[13]:
      df1  df2
col1    4   12
col2    6   14

注意:对于每个(df,col)对,您正在申请一个numpy数组:

In [21]: def f(x):
              print(repr(x))
              return 1

In [22]: p.apply(f, 'major')
array([1, 3])
array([2, 4])
array([5, 7])
array([6, 8])
Out[22]:
      df1  df2
col1    1    1
col2    1    1

您可以选择另一个numpy / linalg函数(或创建自己的函数)。

更新:实际上这不是你想要的,你必须使用项目轴:

In [31]: p.apply(f, 'items')
array([1, 5])
array([2, 6])
array([3, 7])
array([4, 8])
Out[31]:
   col1  col2
1     1     1
2     1     1