【问题标题】:python dataframe vector comparisonpython数据帧向量比较
【发布时间】:2020-12-03 23:22:07
【问题描述】:

我有一个这样的 df:

   | name | age |
   |----|------|
   | Dav | 25   |
   | Las | 50   |
   | Oms | 70   |

如何根据这些人彼此的年龄差异进行比较来创建新的 df 或矩阵? 输出会是这样的(* 只是为了解释,不需要显示):

              |* Dav|* Las |* Oms |
      | *Dav  | 0   |  25 |  45|
      | *Las  | 25  |  0  |  20|
      | *Oms  | 45  |  20 |  0|

或者像这样:

  | 25  |  45|
  | 25  |  20|
  | 45  |  20|

【问题讨论】:

    标签: python pandas dataframe compare


    【解决方案1】:

    您可以使用corr 来计算所有对的差异:

    import numpy as np
    from operator import sub
    
    # compute all pairs diffs
    res = df.set_index('name').T.corr(sub).abs()  # optional df.set_index('name').T.corr(lambda x, y: abs(x - y))
    
    # set diagonal to 0
    res.values[(np.arange(res.shape[0]),)*2] = 0
    
    print(res)
    

    表达式:

    df.set_index('name').T
    

    创建以下 DataFrame:

    name  Dav  Las  Oms
    age    25   50   70
    

    corr 函数将对角线值设置为 1,来自文档:

    并返回一个浮点数。请注意,从 corr 返回的矩阵将 沿对角线有 1 并且将是对称的,无论 可调用的行为。

    0.24.0 版中的新功能。

    而函数sub 就是:

    def sub(a, b):
        "Same as a - b."
        return a - b
    

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 2021-12-14
      • 2019-07-21
      • 1970-01-01
      相关资源
      最近更新 更多