【发布时间】:2017-08-23 19:13:23
【问题描述】:
我有 2 个数据框 A 和 B,正在考虑如何创建橙色数据框
为每个单元格填充的值将基于列和标题。例如:左上角的单元格将是一个基于行和列索引的函数(数据框 A.A0 + 数据框 A.A1 - 数据框 B.0)
我尝试使用橙色维度的空数据框 (emptyDF)
emptyDf.applyMap(lambda x: x[dfA[0]] + x[dfA[1] - x[dfB[0]]]
【问题讨论】:
我有 2 个数据框 A 和 B,正在考虑如何创建橙色数据框
为每个单元格填充的值将基于列和标题。例如:左上角的单元格将是一个基于行和列索引的函数(数据框 A.A0 + 数据框 A.A1 - 数据框 B.0)
我尝试使用橙色维度的空数据框 (emptyDF)
emptyDf.applyMap(lambda x: x[dfA[0]] + x[dfA[1] - x[dfB[0]]]
【问题讨论】:
您尝试做的不是使用 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])
无论如何,我想知道这是否可以直接在 Pandas 中工作,但它只是让我印象深刻的是一个矩阵问题,而且它是一个大型系统的计算时间,因为它停留在 NumPy 中,我不认为它会很慢.
【讨论】: