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 関数を選択する (または独自に作成する) ことができます。

更新:実際には、これはあなたが望むものではありません。アイテム軸を使用する必要があります:

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 に答える