Pandas eval-在列上调用用户定义的函数

正如我的问题所述,我想在运行时调用自定义函数到数据框。自定义功能的用途是计算两个日期(例如年龄)之间的差,将年转换为月,从两列中找到最大-最小等。

到目前为止,我成功地执行了算术运算和一些函数,例如abs(),sqrt(),但无法使min()-max()正常工作。

df.eval('TT = sqrt(Q1)',inplace=True)
df.eval('TT1 = abs(Q1-Q2)',inplace=True)
df.eval('TT2 = (Q1+Q2)*Q3',inplace=True)

以下代码适用于eval。如何在dataframe eval中使用相同的内容?

def find_max(x,y):
    return np.maximum(x,y)

eval('max1')(4,7)

def find_age(date_col1,date_col2):
    return 'I know how to calc age but how to call func this with df.eval and assign to new col'

样本数据框:

op_d = {'ID': [1, 2,3],'V':['F','G','H'],'AAA':[0,1,1],'D':['2019/12/04','2019/02/01','2019/01/01'],'DD':['2019-12-01','2016-05-31','2015-02-15'],'CurrentRate':[7.5,2,2],'NoteRate':[2,3,3],'BBB':[0,4,4],'Q1':[2,8,10],'Q2':[3,5,7],'Q3':[5,6,8]}
df = pd.DataFrame(data=op_d)

任何帮助或链接到Doc表示赞赏。

我找到但没有解决我的问题的有用链接是:

使用pd.eval()在熊猫中进行动态表达评估

将局部变量与pandas eval函数配合使用

将参数传递给python eval()

cs95

可以像往常一样调用函数,您需要使用@synbol来引用它们

df                                                                  
   A  B
0  1  0
1  0  0
2  0  1

def my_func(x, y): return x + y                                     

df.eval('@my_func(A, B)')                                          
0    1
1    0
2    1
dtype: int64

当然,这里的期望是您的函数期望将系列作为参数。否则,请根据需要将函数包装在对的调用中np.vectorize

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章