将函数应用于两列pandas数据帧以获得两个新列

aho*_*osh 0 python apply multiple-columns pandas

我有一个带有列Longitude和的pandas数据框Latitude.我想XY他们相处.utm调用from_latlon中有一个函数可以执行此操作.它接收LatitudeLongitude并给出[X,Y].这是我做的:

    def get_X(row):
        return utm.from_latlon(row['Latitude'], row['Longitude'])[0]

    def get_Y(row):
        return utm.from_latlon(row['Latitude'], row['Longitude'])[1] 

    df['X'] = df.apply(get_X, axis=1)
    df['Y'] = df.apply(get_Y, axis=1)
Run Code Online (Sandbox Code Playgroud)

我想定义一个函数get_XYfrom_latlon只应用一次来节省时间.我看了一下这里,这里这里,但我找不到用一个apply函数制作两列的方法.谢谢.

Bre*_*arn 6

您可以从函数返回一个列表:

d = pandas.DataFrame({
    "A": [1, 2, 3, 4, 5],
    "B": [8, 88, 0, -8, -88]
})

def foo(row):
    return [row["A"]+row["B"], row["A"]-row["B"]]

>>> d.apply(foo, axis=1)
    A   B
0   9  -7
1  90 -86
2   3   3
3  -4  12
4 -83  93
Run Code Online (Sandbox Code Playgroud)

你也可以退回一个系列.这允许您指定返回值的列名:

def foo(row):
    return pandas.Series({"X": row["A"]+row["B"], "Y": row["A"]-row["B"]})

>>> d.apply(foo, axis=1)
    X   Y
0   9  -7
1  90 -86
2   3   3
3  -4  12
4 -83  93
Run Code Online (Sandbox Code Playgroud)