我有数据框
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']=26
和df[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/