当前位置:  开发笔记 > 编程语言 > 正文

python pandas-应用具有两个列参数的函数

如何解决《pythonpandas-应用具有两个列参数的函数》经验,为你挑选了2个好方法。

你能用两个不同的列作为参数创建一个python pandas函数吗?

我有一个函数,如果两列的值在同一范围内,则返回1.否则返回0:

def segmentMatch(RealTime, ResponseTime):
    if RealTime <= 566 and ResponseTime <= 566:
        matchVar = 1
    elif 566 < RealTime <= 1132 and 566 < ResponseTime <= 1132:
        matchVar = 1
    elif 1132 < RealTime <= 1698 and 1132 < ResponseTime <= 1698:
        matchVar = 1
    else:
        matchVar = 0
    return matchVar

我希望第一个参数,RealTime是我的数据框中的一列,这样该函数将获取该列中每行的值.例如RealTimedf['TimeCol'],第二个参数是df ['ResponseCol']`.我希望结果成为数据框中的新列.我遇到了几个 已回答类似问题的线程,但看起来这些参数是变量,而不是数据帧行中的值.

我尝试了以下但它不起作用:

df['NewCol'] = df.apply(segmentMatch, args=(df['TimeCol'], df['ResponseCol']), axis=1)

N. Wouda.. 31

为什么不这样做呢?

df['NewCol'] = df.apply(lambda x: segmentMatch(x['TimeCol'], x['ResponseCol']), axis=1)

我们现在只是将每行中的相应条目作为参数传递,而不是尝试将列作为参数传递,而是将结果存储在中'NewCol'.



1> N. Wouda..:

为什么不这样做呢?

df['NewCol'] = df.apply(lambda x: segmentMatch(x['TimeCol'], x['ResponseCol']), axis=1)

我们现在只是将每行中的相应条目作为参数传递,而不是尝试将列作为参数传递,而是将结果存储在中'NewCol'.



2> rahul..:

如果要在外部定义函数,则实际上不需要lambda函数:

def segmentMatch(vec):
    RealTime = vec[0]
    ResponseTime = vec[1]
    if RealTime <= 566 and ResponseTime <= 566:
        matchVar = 1
    elif 566 < RealTime <= 1132 and 566 < ResponseTime <= 1132:
        matchVar = 1
    elif 1132 < RealTime <= 1698 and 1132 < ResponseTime <= 1698:
        matchVar = 1
    else:
        matchVar = 0
    return matchVar

df['NewCol'] = df[['TimeCol', 'ResponseCol']].apply(segmentMatch, axis=1)

如果“ segmentMatch”将返回两个值的向量,则可以执行以下操作:

def segmentMatch(vec):
    ......
    return pd.Series((matchVar1, matchVar2)) 

df[['NewCol', 'NewCol2']] = df[['TimeCol','ResponseCol']].apply(segmentMatch, axis=1)

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有