将函数应用于数据框时,将每一列作为参数还是将整行作为参数更好?

时间:2019-10-25 19:01:36

标签: python python-3.x pandas dataframe apply

例如,当您要将函数calc_val()应用于数据框并且可以自由定义函数时,最好给它一个像def calc_val(a, b, c)或{{1 }或def calc_val(df)?换句话说,选项A,B或C:

选项A 的优点是显示函数正在处理哪些列,但是def calc_val(row)也很混乱,并且通过掩藏重要信息(例如,函数调用)使可读性变差到lambda)沿线走得更远,这有时使在遍历代码时更难看清该函数的使用位置。

选项B 更加简洁明了,但仍然掩埋了正在调用的函数,并且也没有显示计算中涉及哪些列。

选项C 非常清楚通过将calc_val_a沿行埋入来应用了什么功能,这与选项A和B不同,但是它没有显示新的列是添加到数据框,也没有在计算中使用哪些列。

假设这些函数调用出现在某些数据处理脚本的apply函数中,那么对于这样的可读性是否存在标准或公认的最佳实践?

(旁注:我也知道main()对于速度不是理想的选择,但是我主要关注可读性,同时处理相对较小的数据集。但是,如果有人建议替换apply调用在多个数据框列上运行的函数,在这种情况下也将有所帮助。)

选项A:

apply

选项B:

def calc_val_a(a, b, c):
    if c==1:
        val = a*b
    elif c=='2:
        val = a-b
    return val

df['val'] = df.apply(lambda row: calc_val_a(row.a, row.b, row.c), axis=1)

选项C:

def calc_val_b(row):
    a = row.a
    b = row.b
    c = row.c
    if c==1:
        val = a*b
    elif c=='2:
        val = a-b
    return val

df['val'] = df.apply(calc_val_b, axis=1)

0 个答案:

没有答案
相关问题