python - Pandas 应用功能并更新数据框的副本

标签 python pandas dataframe matrix matrix-multiplication

我有数据框

df = pd.DataFrame({'A':[1,2,2,1],'B':[20,21,22,32],'C':[4,5,6,7],'D':[99,98,97,96]})
dfcopy = df.copy()

我想将函数应用于 df 中的值根据“A”列中的值计算“B”列和“C”列,然后更新 dfcopy 中相应行中的结果.

例如,对于“A”为 1 的每一行,获取该行的“B”和“C”值,应用函数并将结果存储在 dfcopy 中。对于第一行,其中“A”==2,“B”的值为 21,“C”的值为 5。假设该函数是乘以 2x2 个矩阵:np.dot(np.ones((2,2)),np.array([[21],[5]])) 。那么我们想要df[1,'B']=26df[1,'C']=26 。然后我想在 A 中重复不同的值直到根据 A 中的每个值唯一应用该函数。 .

最后,我不想逐行迭代,检查 A 中的值,并应用函数。这是因为将根据 A 的每个值进行操作。 (即 np.ones((2,2)) 将被文件中与 A 中的值相对应的值替换,我不想重复它

我确信我可以强制解决方案(例如通过循环和设置值),但我猜测有一种优雅的方法可以使用 Pandas API 来做到这一点。我就是找不到。

最佳答案

在下面的示例中,我选择了不同的矩阵,因此很明显我已经应用了它们。

df = pd.DataFrame({'A':[1,2,2,1],'B':[20,21,22,32],'C':[4,5,6,7],'D':[99,98,97,96]})
matrices = [None,pd.DataFrame([[1,0],[0,0]],index=["B","C"]),pd.DataFrame([[0,0],[0,1]],index=["B","C"])]
df[["B","C"]] = pd.concat((df[df["A"] == i][["B","C"]].dot(matrices[i]) for i in set(df["A"])))
   A   B  C   D
0  1  20  0  99
1  2   0  5  98
2  2   0  6  97
3  1  32  0  96

关于python - Pandas 应用功能并更新数据框的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64439226/

相关文章:

python - 我想根据每个 deviceId 过滤行并对这些行执行一些操作。 ( Pandas )

python - 使用 pandas 从世界银行 API 获取数据

r - 具有与值对相关的随机实验的函数

python - 使用 pd.concat 内部连接两个数据帧,只从一个数据帧中选择列

Python:需要 functools.partial(function) 的结果被称为其他东西

python - 有没有办法知道在 python 中是向上舍入还是向下舍入?

python - 将列值拆分为 2 个新列 - Python Pandas

python - 计算由唯一来源发布的两条新闻之间的平均每日时间量

java - Spark scala 模式在加载时未强制执行

python - 在 Keras 中,如何在训练期间访问 Word2Vec(嵌入)向量以实现自定义损失函数