基于索引(python)跨2个数据帧的函数

时间:2017-08-23 10:12:02

标签: python pandas dataframe

我有2个数据框A和B,并且正在考虑如何以橙色

创建数据框

要为每个单元格填充的值将基于列和标题。例如:左上角的单元格将是基于行和列索引的func(数据框A.A0 +数据框A.A1 - 数据框B.0)

enter image description here

我尝试使用橙色尺寸的空数据框(emptyDF)

emptyDf.applyMap(lambda x: x[dfA[0]] + x[dfA[1] - x[dfB[0]]]

1 个答案:

答案 0 :(得分:1)

你要做的不是使用Pandas数据帧的精神,而是更多的NumPy更适合的矩阵操作练习,Pandas构建的库。在Pandas数据帧和NumPy阵列之间移动并不难,但是当您将索引和列标签重新放入pandas时,可能需要小心存储索引和列标签。有各种各样的NumPy函数可以做你想象的任何操作,我找到了一些工具来帮助这个应用程序:

import pandas as pd
import numpy as np

# create your dataframes:

series = pd.Series([10,9,8,7,6], index=[0,1,2,3,4])
df1 = pd.DataFrame([series])

cols = ['A','B','C','D']
list_of_series = [pd.Series([1,2,3,4],index=cols), pd.Series([5,6,7,8],index=cols)]
df2 = pd.DataFrame(list_of_series, columns=cols)

现在转换为NumPy

A = np.array(df2)
>>> A
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

B = np.array(df1)
>>> B.T
array([[10],
       [ 9],
       [ 8],
       [ 7],
       [ 6]])

现在完成任务的几个NumPy操作:

C = A.sum(axis=0)
D = np.tile(C,(5,1))
E = np.tile(B.T, (1,4))
F = D - E
F
array([[-4, -2,  0,  2],
       [-3, -1,  1,  3],
       [-2,  0,  2,  4],
       [-1,  1,  3,  5],
       [ 0,  2,  4,  6]])

现在将其转换回数据帧:

pd.DataFrame(F, columns=['A','B','C','D'], index=[0,1,2,3,4])

enter image description here

无论如何,我想知道这是否可以直接来自熊猫,但它只是让我感到一个矩阵问题,它是一个大型系统的计算时间,因为它留在NumPy我不认为它会慢一点。