gpt4 book ai didi

python - Pandas 应用函数并更新数据帧的副本

转载 作者:行者123 更新时间:2023-12-04 08:43:40 26 4
gpt4 key购买 nike

我有数据框

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 中的值应用一个函数列 'B' 和 'C' 基于列 'A' 中的值,然后更新 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/

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