【问题标题】:Pandas apply function and update copy of dataframe熊猫应用功能并更新数据框的副本
【发布时间】:2020-10-20 05:52:34
【问题描述】:

我有数据框

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()

我想根据列“A”中的值将函数应用于df 列“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 有一种优雅的方法可以做到这一点。我就是找不到。

【问题讨论】:

    标签: python pandas dataframe matrix matrix-multiplication


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多