大佬教程收集整理的这篇文章主要介绍了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”-更新和插入的组合,从某种意义上说df2
,df1
如果行键已经存在,则来自的每一行要么(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,请注明来意。