代码之家  ›  专栏  ›  技术社区  ›  anky

熊猫系列/df使用集合索引()更新

  •  1
  • anky  · 技术社区  · 7 年前

    df = pd.DataFrame([["11","1", "2"], ["12","1", "2"], ["13","3", "4"]],
                     columns=["ix","a", "b"])
    df1 = pd.DataFrame([["22","8", "9"], ["12","10", "11"], ["23","12", "13"]],
                         columns=["ix","c", "b"])
    
    df                     df1
        ix  a   b        ix  c   b
    0   11  1   2     0  22  8   9
    1   12  1   2     1  12  10  11
    2   13  3   4     2  23  12  13
    

    如果我们执行 df.update(df1) ,这将更新整个列 ix & b 数据帧格式- df 因为两个数据帧的索引号相同。

    列作为两个数据帧的索引,并尝试更新第一个数据帧,如下所示:

    df_new = df.set_index('ix').rename_axis(None).update(df1.set_index('ix').rename_axis(None))
    

    但是,这不会返回任何内容。

    B 更新为 哪里 属于 df1 df 比赛。比如:

        a   b
    11  1   2
    12  1   11
    13  3   4
    

    我是不是遗漏了什么?是 df.update()

    1 回复  |  直到 7 年前
        1
  •  1
  •   cs95 abhishek58g    7 年前

    update 就地修改调用数据帧。从文档中:

    使用其他数据帧中的非NA值就地修改。

    在索引上对齐。没有返回值。

    因此,您唯一的选择是预先将索引设置为单独的步骤。

    df.set_index('ix', inplace=True)
    df.update(df1.set_index('ix'))
    df.reset_index()
    
       ix  a   b
    0  11  1   2
    1  12  1  11
    2  13  3   4
    

    如果试图避免修改原始文件,则这始终是另一个选项:

    df_copy = df.set_index('ix')
    df_copy.update(df1.set_index('ix'))
    df_copy
    
        a   b
    ix       
    11  1   2
    12  1  11
    13  3   4