我正在嘗試操作 excel 作業表資料以自動化 excel 上的流程(不是開發人員),我確實有 2 個資料框:
一個看起來像下面(唯一的區別是更多的列)
Date Val1 Val2
0 2020-09-29 13:22:57 5.34 3.2
1 2020-09-29 13:23:12 4.5 Nan
2 2020-09-29 13:23:44 Nan 56.4
3 2020-09-29 13:24:01 24 0.3
我們注意到上面的索引是有序的,并且所有欄位都填充了日期,但不一定填充了所有其他列。
第二個資料框具有以下特征,相等或更多行沒有任何額外的日期,也沒有重復的日期,但額外的行是空的(NaT 為 Date,Nan 為所有其他列),df2 的索引也不是按順序排列的到其他行程:
Date Val1 Val2
0 2020-09-29 13:22:57 Nan Nan
5 Nat Nan Nan
1 2020-09-29 13:23:12 4.5 Nan
4 NaT Nan Nan
6 Nat Nan Nan
2 2020-09-29 13:23:44 Nan Nan
3 2020-09-29 13:24:01 24 0.3
我基本上需要的是檢查匹配的日期,如果 df2 中的日期與 df1 中的日期匹配,以便在 df2 中為該日期的整行填充與 df 中相同的確切值,而不更改空行的位置df2 或添加列:
預期輸出:
Date Val1 Val2
0 2020-09-29 13:22:57 5.34 3.2
5 Nat Nan Nan
1 2020-09-29 13:23:12 4.5 Nan
4 NaT Nan Nan
6 Nat Nan Nan
2 2020-09-29 13:23:44 Nan 56.4
3 2020-09-29 13:24:01 24 0.3
我嘗試了多種方法,包括:
data_frames = [df,df_2]
df_merged = reduce(lambda left, right: pd.merge(left, right, on=['Date'],
how='outer'), data_frames)
print(df_merged)
并且:
df_f = pd.merge(df, df_2, on='Date', how='outer').fillna(method='ffill')
還嘗試將其更改how為inner,等left,right但沒有得到我想要的結果,我只需要合并列。
編輯:
df1 = pd.DataFrame({'Date': ['2020-09-29 13:22:57', '2020-09-29 13:23:12', '2020-09-29 13:23:44', '2020-09-29 13:24:01'],
'Val1': [5.34, 4.5, np.nan, 24],
'Val2': [3.2, np.nan, 56.4, 0.3]})
df2 = pd.DataFrame({'Date': ['2020-09-29 13:22:57', np.nan, '2020-09-29 13:23:12', np.nan, np.nan, '2020-09-29 13:23:44', '2020-09-29 13:24:01'],
'Val1': [5.34, np.nan, 4.5, np.nan, np.nan, np.nan, 24],
'Val2': [3.2, np.nan, np.nan, np.nan, np.nan, 56.4, 0.3]},
index=[0,5,1,4,6,2,3])
f_f1 = df1.merge(df2["Date"], on="Date", how="right").set_index(df2.index)
print(f_f1)
uj5u.com熱心網友回復:
IIUC,嘗試:
#convert to datetime if needed
df1["Date"] = pd.to_datetime(df1["Date"])
df2["Date"] = pd.to_datetime(df2["Date"])
f_f1 = df1.merge(df2["Date"], on="Date", how="right").set_index(df2.index)
>>> df_f
Date Val1 Val2
0 2020-09-29 13:22:57 5.34 3.2
5 NaN NaN NaN
1 2020-09-29 13:23:12 4.50 NaN
4 NaN NaN NaN
6 NaN NaN NaN
2 2020-09-29 13:23:44 NaN 56.4
3 2020-09-29 13:24:01 24.00 0.3
輸入:
df1 = pd.DataFrame({'Date': ['2020-09-29 13:22:57', '2020-09-29 13:23:12', '2020-09-29 13:23:44', '2020-09-29 13:24:01'],
'Val1': [5.34, 4.5, np.nan, 24],
'Val2': [3.2, np.nan, 56.4, 0.3]})
df2 = pd.DataFrame({'Date': ['2020-09-29 13:22:57', np.nan, '2020-09-29 13:23:12', np.nan, np.nan, '2020-09-29 13:23:44', '2020-09-29 13:24:01'],
'Val1': [5.34, np.nan, 4.5, np.nan, np.nan, np.nan, 24],
'Val2': [3.2, np.nan, np.nan, np.nan, np.nan, 56.4, 0.3]},
index=[0,5,1,4,6,2,3])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453439.html
