Python 将方法应用于熊猫中的多个数据集
我想使用Python 将方法应用于熊猫中的多个数据集,python,pandas,Python,Pandas,我想使用.assign方法将多个lambda函数分配给多个数据集。到目前为止,我尝试了for循环,但没有成功: a = pd.DataFrame({'a': np.arange(5), 'b': np.arange(5)}) b = pd.DataFrame({'a': np.arange(5,10), 'b': np.arange(5,10)}) for data in [a,b]: data.assign(c
.assign
方法将多个lambda函数分配给多个数据集。到目前为止,我尝试了for循环,但没有成功:
a = pd.DataFrame({'a': np.arange(5),
'b': np.arange(5)})
b = pd.DataFrame({'a': np.arange(5,10),
'b': np.arange(5,10)})
for data in [a,b]:
data.assign(c = lambda x: x.a+x.b,
d = lambda x: x.a^x.b)
编辑:
以下操作也不起作用:
for data in [a,b]:
data = data.assign(c = lambda x: x.a+x.b,
d = lambda x: x.a^x.b)
这不起作用的主要原因是,
asign
不会修改现有的dataframe,而是返回一个新的dataframe对象
您要做的是将相同的函数应用于多个对象,这正是map
函数的作用:
def分配(df):
返回df.assign(c=lambda x:x.a+x.b,
d=λx:x.a^x.b)
(a,b)=映射(分配(a,b))
更一般的解决方案如下:
#假设我们无法控制以下代码行:
数据帧=(a,b)
#我们仍然可以使用相同的解决方案:
数据帧=元组(映射(分配,数据帧))
打印(数据帧[0])
关于您的编辑,这不起作用的原因有点有趣。这在您的代码中可能不明显,但在下面的代码中:
a=[1,2,3]
数据=a
数据=[4,5,6]
打印(数据)
这里很清楚,这个输出是[4,5,6]
而不是[1,2,3]
您的代码和最后一个代码中发生的情况是相同的:
data=a
:data
绑定到与a
相同的对象(分别为b
)data=…
:创建一个新的绑定,保持a
的现有绑定未被触及(因为data
仅绑定到与a
相同的对象,data
从来都不是a
)李>
最后,对于[a,b]中的数据:
并不意味着数据
在下一次迭代中将成为a
(分别为b
)的别名。(这是您在编写本文时所期望的。)相反,对于[a,b]中的数据:相当于:
data=a
#第一次迭代
数据=b
#第二次迭代
这不起作用,因为asign
不会修改现有的数据帧,而是返回一个新的数据帧对象。我想实际上您想要一个适用于任意数量数据帧的解决方案?请查看此答案,谢谢!我编辑了这个问题,因为我忘了放一个data=data.assign…
你应该让你的代码保持原样,否则人们阅读答案时,问题将不理解发生了什么^^^我也编辑了,以获得这个问题的完整答案。我希望这是有意义的,如果您有任何问题,请告诉我,因为我认为这是一个有趣的问题/答案,以便正确和明确。