代码之家  ›  专栏  ›  技术社区  ›  Alex 75

数据帧的解释。使用lambda指定()行为

  •  0
  • Alex 75  · 技术社区  · 3 年前
    import pandas as pd
    import numpy as np
    
    np.random.seed(99)
    rows = 10
    df = pd.DataFrame ({'A' : np.random.choice(range(0, 2), rows, replace = True),
                        'B' : np.random.choice(range(0, 2), rows, replace = True)})
    
    
    def get_C1(row): 
        return row.A + row.B
    
    def get_C2(row): 
        return 'X' if row.A + row.B == 0 else 'Y'
    
    def get_C3(row): 
        is_zero = row.A + row.B
        return "X" if is_zero else "Y"
    
    df = df.assign(C = lambda row: get_C3(row))
    

    为什么 得到C3

    1 回复  |  直到 3 年前
        1
  •  1
  •   richardec    3 年前

    df.assign ,当传递函数时,其行为类似 df.apply 具有 axis=1 ,它为每行调用函数。

    那是不对的。

    the docs df.assign

    其中该值是可调用的,在

    这意味着您传递给的函数 assign 被称为 整个数据帧 而不是 每行 .


    所以 在你的职责范围内 get_C3 这个 row 参数根本不是一行。它是一个完整的数据帧(应该重命名为 df 或者别的什么)等等 row.A row.B

    因此 is_zero ... if is_zero ...