Python 如何使用apply作为两个变量的行解包

Python 如何使用apply作为两个变量的行解包,python,pandas,Python,Pandas,我有一个数据框,它的行比列多得多,由位置组成。我创建了一个计算x,y位置的函数,称之为“findLoc”。当我使用apply计算所有x0、y0位置时,我希望df.apply将它们添加到第1行,然后添加到第2行,最后添加到第3行。在我的例子中,它是将它们添加到第1列、第2列等 这是我的密码: import pandas as pd import matplotlib.pyplot as plt import numpy as np def findLoc(x0,y0): x0 = 1

我有一个数据框,它的行比列多得多,由位置组成。我创建了一个计算x,y位置的函数,称之为“findLoc”。当我使用apply计算所有x0、y0位置时,我希望df.apply将它们添加到第1行,然后添加到第2行,最后添加到第3行。在我的例子中,它是将它们添加到第1列、第2列等

这是我的密码:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

def findLoc(x0,y0):
    x0 = 1
    y0 = 2
    return x0,y0

df = pd.DataFrame(np.zeros((2, 4)))
df.columns= ['x0','y0','x1','y1']
df.index= ['Locations A','Locations B']

print(df)

df2=df.copy()

df2['x0'],df2['y0'] = df.apply(lambda loc : findLoc(loc['x0'],loc['y0']), axis=1)

df2
我已经看过了一些关于apply/applymap/map如何工作的教程,但我仍然没有读到

我的数据框开始为空,如下所示:

0 0 0 0

0 0 0 0

在我的代码运行后,它看起来像:

1100

2200

我希望是这样

120

120

事实上,我真的很想这样

120

120

120

120

120

或者更长,但是当我有比变量更多的行时,我会得到一个错误

提前谢谢

干杯

编辑:

我绕过它的方法是将df.apply分成两个调用,其中一个是x,一个是y。但这是多余的,不希望为了让它工作而运行同一个例程两次

例如:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

def findLoc_x(x0,y0):
    x0 = 1
    y0 = 2
    return x0

def findLoc_y(x0,y0):
    x0 = 1
    y0 = 2
    return y0

df = pd.DataFrame(np.zeros((2, 4)))
df.columns= ['x0','y0','x1','y1']
df.index= ['Locations A','Locations B']

print(df)

df2=df.copy()

df2['x0'] = df.apply(lambda loc : findLoc_x(loc['x0'],loc['y0']), axis=1)
df2['y0'] = df.apply(lambda loc : findLoc_y(loc['x0'],loc['y0']), axis=1)

# df2['x0'],df2['y0'] = findLoc(df['x0'],df['y0'])

df2

此代码按照我的要求工作。
df.apply()
中的axis=1表示正在按列应用该函数。 这将导致
findLoc
返回的列
df2['x0']
df2['y0']
变为
1,2
,这将导致:

1 1 0 0
2 2 0 0
你可以走的一条路是:

df2['x0'],df2['y0'] = findLoc(.. , ..)
这将导致

1 2 0 0
1 2 0 0
因为
findLoc(a,b)=(1,2)
的值被分配给
df2['x0']
df2['y0']


我不明白为什么您需要使用df.apply,如果有任何用途,请在回答中进行评论。

Samarth Bhatia,这是一个比我在删除axis=1时应用它要简单得多的脚本,我得到:keyrerror:'x0'是的,这是因为x0不是索引,它是一个列名,只能与axis=1.Hmm一起使用,我看它相当简单。我将尝试查找一些内容。在这个实例中,我应该使用map还是applymap?