Python 熊猫:通过“应用”功能;A栏“;,同时阅读;B栏“;

Python 熊猫:通过“应用”功能;A栏“;,同时阅读;B栏“;,python,pandas,Python,Pandas,我正在使用Pandas来驱动Python函数。在inputs.csv中,我使用“列A”中的每一行作为函数的输入 在csv中,还有一个的“B列”,其中包含我想读入函数中变量x的值。不应从“B列”“A列”中应用——这仍然应该从“A列”中执行。这可能吗 这是应用A列功能的当前代码: 编辑后:此问题已被确定为可能重复的问题。虽然答案可能相同,但问题却不一样。对于未来的读者来说,两列上的apply与一列上的apply以及同时“阅读”另一列的互换性可能并不明显。因此,问题应该是开放的。是的,您当前正在使

我正在使用
Pandas
来驱动
Python
函数。在
inputs.csv
中,我使用
“列A”
中的每一行作为函数的输入

csv
中,还有一个
的“B列”
,其中包含我想读入函数中变量
x
的值。不应从
“B列”
“A列”中应用
——这仍然应该从
“A列”
中执行。这可能吗


这是应用A列功能的当前代码:



编辑后:此问题已被确定为可能重复的问题。虽然答案可能相同,但问题却不一样。对于未来的读者来说,两列上的
apply
与一列上的
apply
以及同时“阅读”另一列的互换性可能并不明显。因此,问题应该是开放的。

是的,您当前正在使用,而您可以使用-,with
axis=1
获取函数中的每一行,然后您可以作为-
行[]
访问列

范例-

In [37]: df
Out[37]:
   X  Y  Count
0  0  1      2
1  0  1      2
2  1  1      2
3  1  0      1
4  1  1      2
5  0  0      1

In [38]: def func1(r):
   ....:     print(r['X'])
   ....:     print(r['Y'])
   ....:     return r
   ....:

In [39]: df.apply(func1,axis=1)
0
1
0
1
1
1
1
0
1
1
0
0
Out[39]:
   X  Y  Count
0  0  1      2
1  0  1      2
2  1  1      2
3  1  0      1
4  1  1      2
5  0  0      1

这只是一个非常简单的示例,您可以根据实际需要修改它。

传递给的
axis=1
参数将整行作为一个元组参数放入

但是,这比使用单个列应用要慢得多。如果性能是一个问题,我建议不要这样做

def scrape(x):
    a, b = x
    # Magically create c, d, e from a
    print(b)
    return pd.Series([c, d, e])

df[["Column C", "Column D", "Column E"]] = df[(['Column A', 'Column B'])].apply(scrape, axis=1)

我不确定你的问题是否正确,但也许你想要的只是
df[(['Column A','Column B'])。apply(scrape,axis=1)
,这意味着你的函数仍然只有一个参数
scrape
,但这个参数是
列A
列B
的值的元组。谢谢你的回答。我不需要以任何方式组合列–
列A
仍然保留参数的关键字。我只需要读取
列B
并将其传递给变量。如果我通过
axis=1
运行参数,我如何从元组中为
def函数(A)
选择
列A
?在
def函数(A)内部:
您只需要有这样一行:
col_A,col_b=A
更准确地回答。您想在哪里“创建x”?它应该在数据帧中结束,还是仅仅在函数中结束?x应该是一个系列还是一个变量?谢谢你的回复!我不确定我是否理解正确,我可能不清楚-
a
b
不相同,也不应该合并。我想做的是使用
a
作为函数的参数,就像在我的原始代码中一样
b
只应作为
x=b
传递给
x
。因此,如果我运行
def function(a)
,如何在该函数中包含
b
?@Winterflags更新了我的答案谢谢您的帮助!我在您的解决方案中遇到了一个奇怪的JSON错误,
不是JSON可序列化的
。我相信它会工作,但我无法解决它。谢谢你的回复,它现在工作了!我唯一的问题是,它会在进入下一行之前读取最上面的行2次。这样就没有重复了。你知道为什么吗(如果它与
DataFrame.apply()
vs
Series.apply()
。不,它与
Series.apply没有任何关系。apply
vs
DataFrame.apply
。你确定DataFrame本身顶部没有两次相同的行吗?检查我的示例,它没有两次读取第一行(只是第一行和第二行是相同的)。若要交叉检查,请尝试打印该行的
索引
,以查看它是否实际上是同一行。我检查了索引,结果是正确的。问题一定在于我如何将参数传递给函数。(我没有使用文字示例)。谢谢!
def scrape(x):
    a, b = x
    # Magically create c, d, e from a
    print(b)
    return pd.Series([c, d, e])

df[["Column C", "Column D", "Column E"]] = df[(['Column A', 'Column B'])].apply(scrape, axis=1)