将方法应用于熊猫中的多个数据集

时间:2019-03-22 15:07:24

标签: python pandas

我想对多个数据集使用带有多个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)

1 个答案:

答案 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]

您的代码和最后一个代码中发生的事情是相同的:

  1. data = adataa(分别为b)绑定到同一对象
  2. data = ...:创建一个新的绑定,使a的现有绑定保持不变(因为data仅与a绑定到同一对象,{{1} }从来没有data)。

最后,a并不表示 ,for data in [a, b]:将是data别名(分别是{ {1}})在下一次迭代中。 (编写此书时,您可能会期望。)相反,a等效于:

b