想要對索引進行更新
df1是長時間序列(歷史)df2是一個將有新條目的更新,但可能會重疊df1。在重疊時,df2優先。df3是我想要的輸出。
我嘗試呼叫外部合并,但我的索引被忽略了。
我也嘗試設定left_indexand right_index,但這也不起作用。
import pandas as pd
idx1 = pd.date_range('2015-10-05 10:00:00', '2015-10-05 10:04:00', freq='1min')
df1 = pd.DataFrame({'x': [1,2,3,4,5]}, index=idx1)
idx2 = pd.date_range('2015-10-05 10:03:00', '2015-10-05 10:07:00', freq='1min')
df2 = pd.DataFrame({'x': [10,20,30,40,50]}, index=idx2)
idx3 = pd.date_range('2015-10-05 10:00:00', '2015-10-05 10:07:00', freq='1min')
df3 = pd.DataFrame({'x': [1,2,3,10,20,30,40,50]}, index=idx3)
# pd.merge(df1, df2, how='outer') # index being ignored
# df = pd.merge(df_hist, df_update, left_index=True, right_index=True, how='outer') # also bad
uj5u.com熱心網友回復:
append然后您可以groupby:請注意附加順序在您的情況下很重要,因為您想保留 df2 值
out = df2.append(df1).groupby(level=0).head(1).sort_index()
Out[231]:
x
2015-10-05 10:00:00 1
2015-10-05 10:01:00 2
2015-10-05 10:02:00 3
2015-10-05 10:03:00 10
2015-10-05 10:04:00 20
2015-10-05 10:05:00 30
2015-10-05 10:06:00 40
2015-10-05 10:07:00 50
uj5u.com熱心網友回復:
只是pd.concat你的資料框,然后使用x.loc 一個 lambda 函式duplicated(keep='last'):
df3 = pd.concat([df1, df2]).loc[lambda x: ~x.index.duplicated(keep='last')]
輸出:
>>> df3
x
2015-10-05 10:00:00 1
2015-10-05 10:01:00 2
2015-10-05 10:02:00 3
2015-10-05 10:03:00 10
2015-10-05 10:04:00 20
2015-10-05 10:05:00 30
2015-10-05 10:06:00 40
2015-10-05 10:07:00 50
uj5u.com熱心網友回復:
我們可以combine_first在這里使用:
df3 = df2.combine_first(df1)
df3
輸出:
x
2015-10-05 10:00:00 1
2015-10-05 10:01:00 2
2015-10-05 10:02:00 3
2015-10-05 10:03:00 10
2015-10-05 10:04:00 20
2015-10-05 10:05:00 30
2015-10-05 10:06:00 40
2015-10-05 10:07:00 50
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/429570.html
上一篇:索引字串沒有isin()方法
下一篇:如何將型別:pandas.core.frame.DataFrame替換為型別:modin.pandas.dataframe.DataFrame
