程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PandasDataFrame concat /更新(“ upsert”)?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决PandasDataFrame concat /更新(“ upsert”)??

开发过程中遇到PandasDataFrame concat /更新(“ upsert”)?的问题如何解决?下面主要结合日常开发的经验,给出你关于PandasDataFrame concat /更新(“ upsert”)?的解决方法建议,希望对你解决PandasDataFrame concat /更新(“ upsert”)?有所启发或帮助;

一种解决方案是在df1新行中合并df2(即索引不匹配的地方)。然后使用中的值更新值df2

df = pd.concat([df1, df2[~df2.index.isin(df1.indeX)]])
df.update(df2)

>>> df
             A   B
2015-10-01  A1  B1
2015-10-02  a1  b1
2015-10-03  a2  b2
2015-10-04  a3  b3

根据@chrisb的建议,可以进一步简化如下:

pd.concat([df1[~df1.index.isin(df2.indeX)], df2])

谢谢克里斯!

解决方法

我正在寻找一种优雅的方式将所有数据行从一个DataFrame追加到另一个DataFrame(两个DataFrame具有相同的索引和列结构),但是如果在两个DataFrame中都出现相同的索引值,请使用第二个数据中的行帧。

因此,例如,如果我从以下内容开始:

df1:
                    A      B
    date
    '2015-10-01'  'A1'   'B1'
    '2015-10-02'  'A2'   'B2'
    '2015-10-03'  'A3'   'B3'

df2:
    date            A      B
    '2015-10-02'  'a1'   'b1'
    '2015-10-03'  'a2'   'b2'
    '2015-10-04'  'a3'   'b3'

我希望结果是:

                    A      B
    date
    '2015-10-01'  'A1'   'B1'
    '2015-10-02'  'a1'   'b1'
    '2015-10-03'  'a2'   'b2'
    '2015-10-04'  'a3'   'b3'

在某些SQL系统中,这类似于我认为的“
upsert”-更新和插入的组合,从某种意义上说df2df1如果行键已经存在,则来自的每一行要么(a)用于更新现有行存在于中df1,或(b)df1如果行键尚不存在,则插入到末尾。

我想出了以下几点

pd.concat([df1,df2])     # concat the two DataFrames
    .reset_index()        # turn 'date' into a regular column
    .groupby('date')      # group rows by values in the 'date' column
    .tail(1)              # take the last row in each group
    .set_index('date')    # restore 'date' as the index

似乎可行,但这依赖于每个groupby组中的行的顺序始终与原始DataFrame相同,而我没有检查过,并且看起来令人费解。

有人对更直接的解决方案有任何想法吗?

大佬总结

以上是大佬教程为你收集整理的PandasDataFrame concat /更新(“ upsert”)?全部内容,希望文章能够帮你解决PandasDataFrame concat /更新(“ upsert”)?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。