gpt4 book ai didi

python - 将方法应用于 pandas 中的多个数据集

转载 作者:行者123 更新时间:2023-12-01 08:10:12 25 4
gpt4 key购买 nike

我想将 .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不会修改现有的数据框,而是返回一个新的数据框对象。

您想要做的是将相同的函数应用于多个对象,这正是 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 = a :data绑定(bind)到与 a 相同的对象(分别b)
  2. data = ... :创建一个新绑定(bind),保留现有绑定(bind) a不变(因为 data 仅绑定(bind)到与 a 相同的对象, data 从未绑定(bind)到 a )。

最后for data in [a, b]: 并不意味着data将是 a别名 (分别为 b )在下一次迭代期间。 (这正是您在撰写本文时所期望的。) 相反 for data in [a, b]:简单地相当于:

data = a
# 1st iteration
data = b
# 2nd iteration

关于python - 将方法应用于 pandas 中的多个数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55302582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com