如果我有许多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]
答案 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