代码之家  ›  专栏  ›  技术社区  ›  Rehan Azher

pandas的意思是只跨越相似列上的两个数据帧

  •  2
  • Rehan Azher  · 技术社区  · 7 年前

    我有一个独特的需求,在这里我需要两个数据帧的公共列(每行)的平均值。

    我想不出一个蟒蛇式的方法来做这件事。我知道我可以遍历两个数据帧,找到公共列,然后得到键匹配的行的平均值。

    假设我有以下数据帧: DF1:

    Key A   B   C   D   E
    K1  2   3   4   5   8
    K2  2   3   4   5   8
    K3  2   3   4   5   8
    K4  2   3   4   5   8
    

    DF2:

    Key A   B   C   D
    K1  4   7   4   7
    K2  4   7   4   7
    K3  4   7   4   7
    K4  4   7   4   7
    

    结果df应该是两个df的平均值,其中每行的每一列的键都匹配。 结果DF:

     Key    A   B   C   D
        K1  3   5   4   6
        K2  3   5   4   6
        K3  3   5   4   6
        K4  3   5   4   6
    

    我知道我应该把示例代码放在这里,但到目前为止,我还没有想到任何实现这一点的逻辑。

    2 回复  |  直到 7 年前
        1
  •  2
  •   cs95 abhishek58g    7 年前

    使用 DataFrame.add 使用 Key 作为索引:

    df1.set_index('Key').add(df2.set_index('Key')).dropna(axis=1) / 2
    
         A  B  C  D
    Key            
    K1   3  5  4  6
    K2   3  5  4  6
    K3   3  5  4  6
    K4   3  5  4  6
    

    备选方案 concat + groupby .

    pd.concat([df1, df2], axis=0).dropna(axis=1).groupby('Key').mean()
    
         A  B  C  D
    Key            
    K1   3  5  4  6
    K2   3  5  4  6
    K3   3  5  4  6
    K4   3  5  4  6
    
        2
  •  1
  •   U13-Forward    7 年前

    尝试将添加到数据帧,然后使用熊猫 apply 函数然后添加 lambda 在里面然后分开 x 有两个:

    import pandas as pd
    df1 = pd.DataFrame({'A': [2,2]})
    df2 = pd.DataFrame({'A': [4,4]})
    print((df1+df2).apply(lambda x: x/2))
    

    输出:

       A
    0  3.0
    1  3.0
    

    注意:这只是一个虚拟数据帧