首页 > 解决方案 > 使用变换计算两个不同列的值

问题描述

我想应用一个使用变换函数在一个数据帧上使用两个参数的小函数。

考虑这个相当无用的示例函数:

import pandas as pd

def example_function(x, y):
    if y=="hi":
        res = x*3
    else:
        res = x
    return res

根据 y 中的值(“hi”或其他),值 x 将乘以 3 或原样返回。

鉴于此示例数据框


df = pd.DataFrame(dict([("A",[1,2,3,4]), ("B",["hi", "ho", "ho", "hi"])]))

我想得到这个结果:

    美国广播公司
0 1 嗨 3
1 2 嗬 2
2 3 嗬 3
3 4 嗨 12

我认为传递两列应该有效:

df["combined"] = df[["A", "B"]].transform(example_function)

但我收到一个错误(缺少 1 个必需的位置参数)。任何建议如何解决这个问题?

标签: pythonpandas

解决方案


这是不可能的,因为transform单独处理每一列,所以不能在列之间进行过滤(Series)。

DataFrame.apply像您需要的那样工作的解决方案:

df["combined"] = df.apply(lambda x: example_function(x.A, x.B), axis=1)
print (df)
   A   B  combined
0  1  hi         3
1  2  ho         2
2  3  ho         3
3  4  hi        12

您可以使用此功能进行检查:

def function(x):
    print (x)
    return x

df[["A", "B"]].transform(function)

推荐阅读