【问题标题】:function across 2 dataframes based on index (python)基于索引(python)跨2个数据帧的函数
【发布时间】: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]]]

【问题讨论】:

    标签: python pandas dataframe


    【解决方案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])
    

    无论如何,我想知道这是否可以直接在 Pandas 中工作,但它只是让我印象深刻的是一个矩阵问题,而且它是一个大型系统的计算时间,因为它停留在 NumPy 中,我不认为它会很慢.

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多