4

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

合并似乎可以通过简单的操作 df1 + df2 明智地添加元素,但 np.array((df1,df2)) 根本没有做我想要的。

熊猫是否有一种方法可以做到这一点,而无需逐个元素地重建整个对象?

例如,如果我有

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]
4

1 回答 1

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 函数(或创建自己的函数)。

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

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
于 2013-09-18T19:43:39.190 回答