我想对多个数据集使用带有多个lambda函数的t=int(input("nos of test cases"))
while t>0:
num=int(input("enter any number = "))
n=num
sum=0
while n>0:
digit=n%10
sum += digit ** 3
n=n//10
if num==sum:
print("armstronng num")
else:
print("not armstrong")
t-=1
方法。到目前为止,我已经尝试过for循环,但没有成功:
.assign
编辑:
以下方法也不起作用:
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)
答案 0 :(得分:1)
此操作不起作用的主要原因是asign
不会修改现有的数据框,而是返回一个新的数据框对象。
您想要做的就是将相同的函数应用于多个对象,这正是map
函数的作用:
def assign(df):
return df.assign(c = lambda x: x.a+x.b,
d = lambda x: x.a^x.b)
(a, b) = map(assign, (a,b))
更通用的解决方案如下:
# Imagine we don't have control over the following line of code:
dataframes = (a, b)
# We can still use the same solution:
dataframes = tuple(map(assign, dataframes))
print(dataframes[0])
关于您的修改,这种方法不起作用的原因更加有趣。在您的代码中可能看起来并不明显,但在以下代码中将是这样:
a = [1, 2, 3]
data = a
data = [4, 5, 6]
print(data)
很显然,此输出为[4, 5, 6]
而不是[1, 2, 3]
。
您的代码和最后一个代码中发生的事情是相同的:
data = a
:data
与a
(分别为b
)绑定到同一对象data = ...
:创建一个新的绑定,使a
的现有绑定保持不变(因为data
仅与a
绑定到同一对象,{{1} }从来没有data
)。 最后,a
并不表示 ,for data in [a, b]:
将是data
的别名(分别是{ {1}})在下一次迭代中。 (编写此书时,您可能会期望。)相反,a
等效于:
b