【问题标题】:Efficient solutions insert or update row pandas高效的解决方案插入或更新行 pandas
【发布时间】:2018-06-21 22:15:54
【问题描述】:

我有一个具有以下结构的数据框:

              0               1   2
 0   0.00086076    500.00000000  []
 1   0.00086075    819.00000000  []
 2   0.00086072   1162.00000000  []
 3   0.00086071     20.00000000  []
 4   0.00086069  10170.00000000  []
 5   0.00086067     18.00000000  []

然后我有另一个带有更新值的数据框:

              0               1   2
 0   0.00086071     50.00000000  []
 1   0.00086068     81.00000000  []

它在第0列排序,我需要将两者合并如下:

              0               1   2
 0   0.00086076    500.00000000  []
 1   0.00086075    819.00000000  []
 2   0.00086072   1162.00000000  []
 3   0.00086071     50.00000000  []
 4   0.00086069  10170.00000000  []
 5   0.00086068     81.00000000  []
 6   0.00086067     18.00000000  []

因此,如果某个值与第 0 列中的值匹配,则应更新第 1 列,否则应插入新行并再次排序。

是否有有效的方法或预定义的函数来执行此操作?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我认为你需要:


    df = (pd.concat([df1, df2])
            .drop_duplicates([0] , keep='last')
            .sort_values(0 , ascending=False)
            .reset_index(drop=True))
    print (df)
              0        1   2
    0  0.000861    500.0  []
    1  0.000861    819.0  []
    2  0.000861   1162.0  []
    3  0.000861     50.0  []
    4  0.000861  10170.0  []
    5  0.000861     81.0  []
    6  0.000861     18.0  []
    

    【讨论】:

    • 您的df[0] 和您发布的一样吗?如果是这样,那么它就不像期望的输出。
    • @jo9k 他只是以较低的精度打印它们。信息仍然存在
    【解决方案2】:

    你需要的是appenddrop duplicates

    df = df1.append(df2)
    df = df.drop_duplicates('0', keep='last').sort_values('0', ascending= False)
    

    但是根据this Jezrael 的答案是快速和最有效的矿井只是一个替代方案!

    【讨论】:

    • 我认为复制我的解决方案不太好:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 2021-05-06
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多