gpt4 book ai didi

python - Pandas - 合并两个具有不同行数的数据框

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:14 25 4
gpt4 key购买 nike

我有以下两个数据框:

df:

              value
period
2000-01-01 100
2000-04-01 200
2000-07-01 300
2000-10-01 400
2001-01-01 500

df1:

              value
period
2000-07-01 350
2000-10-01 450
2001-01-01 550
2001-04-01 600
2001-07-01 700

这是期望的输出:

df:

              value
period
2000-01-01 100
2000-04-01 200
2000-07-01 350
2000-10-01 450
2001-01-01 550
2001-04-01 600
2001-07-01 700

我在 df1 和 df2 上都有 set_index(['period'])。在创建新列但没有按预期工作后,我还尝试了一些东西,包括 concat 和 where 语句。我的第一个数据框是主要的。第二个是更新。它应该替换第一个中的相应值,同时添加新记录(如果有)。

我该怎么做?

最佳答案

您可以使用 combine_first , 如果某些索引的 dtypeobject 转换 to_datetime如果 df1.index 总是在 df.index 中,效果很好:

print (df.index.dtype)
object

print (df1.index.dtype)
object

df.index = pd.to_datetime(df.index)
df1.index = pd.to_datetime(df1.index)

df = df1.combine_first(df)
#if necessary int columns
#df = df1.combine_first(df).astype(int)
print (df)
value
period
2000-01-01 100.0
2000-04-01 200.0
2000-07-01 350.0
2000-10-01 450.0
2001-01-01 550.0
2001-04-01 600.0
2001-07-01 700.0

如果不是,则需要通过 intersection 进行过滤第一:

df = df1.loc[df1.index.intersection(df.index)].combine_first(df)

另一种解决方案 numpy.setdiff1dconcat

df = pd.concat([df.loc[np.setdiff1d(df.index, df1.index)], df1])
print (df)
value
period
2000-01-01 100
2000-04-01 200
2000-07-01 350
2000-10-01 450
2001-01-01 550
2001-04-01 600
2001-07-01 700

关于python - Pandas - 合并两个具有不同行数的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43856972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com