亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果日期時間在某個時間范圍內,則在 Python 中加入兩個數據集,并創建一個“不匹配”數據集

如果日期時間在某個時間范圍內,則在 Python 中加入兩個數據集,并創建一個“不匹配”數據集

寶慕林4294392 2022-10-11 17:11:26
我有兩個數據集:df1 和 df2,如果日期時間在 df2 的 20 秒內,我希望列從 df1 合并在一起df1Connect                 Ended4/6/2020 1:15:21 PM     4/6/2020 2:05:18 PM3/31/2020 11:00:08 AM   3/31/2020 11:00:10 AM4/1/2020 10:00:05 PM    4/1/2020 12:00:05 PMdf2Start                   End4/6/2020 1:15:21 PM     4/6/2020 2:05:18 PM3/31/2020 11:00:10 AM   3/31/2020 11:00:14 AM期望的輸出:df3Match_Start1             Match_End1                     Match_Start2              Match_End24/6/2020 1:15:21 PM     4/6/2020 2:05:18 PM          4/6/2020 1:15:21 PM     4/6/2020 2:05:18 PM3/31/2020 11:00:08 AM   3/31/2020 11:00:10 AM        3/31/2020 11:00:10 AM   3/31/2020 11:00:14 AM    df4(不匹配)Unmatched_Start         Unmatched_end  4/1/2020 10:00:05 PM    4/1/2020 12:00:05 PM輸入:df1   :   '  Connect   Ended\n0    4/6/2020 1:15:21 PM     4/6/2020 2:05:18 PM\n1     3/31/2020 11:08:08 AM  3/31/2020 11:00:10 AM\n2   4/1/2020 10:00:05 PM    4/1/2020 12:00:05    PM'df2  Out[117]:  '    Start    End\n0    4/6/2020 1:15:21 PM    4/6/2020 2:05:18 PM\n1       3/31/2020 11:08:08 AM  3/31/2020 11:00:14 AM\n2                    NaN                    NaN'我在想什么:df2 = pd.merge_asof(df1, df2, on="Connect", by = "Ended", tolerance=pd.Timedelta('20s'), direction='backward')但是,如何合并 20 秒的條件,以及顯示不匹配的數據集?任何建議表示贊賞
查看完整描述

1 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

您需要讀入數據并轉換為日期時間格式 - 我用剪貼板讀入數據并在那里解析日期。其次,您需要按鍵對數據進行排序(在這種情況下,鍵是 df1 的“連接”和 df2 的“開始”)。在那之后 pandas merge_asof就足夠了。請注意,合并只能在一個鍵上發生,而不是多個:

對數據框進行排序

df1 = df1.sort_values(['Connect','Ended'])

df2 = df2.sort_values(['Start','End'])

合并數據框


merger = pd.merge_asof(df1,df2,

                       left_on='Connect',

                       right_on='Start',

                       tolerance = pd.Timedelta('20s'),

                       direction='forward')


merger


     Connect                   Ended            Start              End

0   2020-03-31 11:00:08 2020-03-31 11:00:10 2020-03-31 11:00:10 2020-03-31 11:00:14

1   2020-04-01 22:00:05 2020-04-01 12:00:05        NaT             NaT

2   2020-04-06 13:15:21 2020-04-06 14:05:18 2020-04-06 13:15:21 2020-04-06 14:05:18

應該很容易選擇匹配和不匹配的行:


matched = merger.dropna()

matched



         Connect              Ended                    Start         End

0   2020-03-31 11:00:08 2020-03-31 11:00:10 2020-03-31 11:00:10 2020-03-31 11:00:14

2   2020-04-06 13:15:21 2020-04-06 14:05:18 2020-04-06 13:15:21 2020-04-06 14:05:18


unmatched = merger.loc[merger.isna().any(axis=1)]

unmatched


    Connect               Ended           Start End

1   2020-04-01 22:00:05 2020-04-01 12:00:05 NaT NaT

希望它就足夠了......如果你被踩到,文檔有更多的例子來指導你


查看完整回答
反對 回復 2022-10-11
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號