第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Pandas:按日期范圍/精確 ID 過濾

Pandas:按日期范圍/精確 ID 過濾

開心每一天1111 2021-10-12 17:34:38
我正在尋找基于另一個(gè)只有三列的小得多的數(shù)據(jù)框來過濾一個(gè)大數(shù)據(jù)框(數(shù)百萬行):ID、開始、結(jié)束。以下是我放在一起的內(nèi)容(有效),但似乎groupby()或np.where可能更快。設(shè)置:import pandas as pdimport iocsv = io.StringIO(u'''time    id  num2018-01-01 00:00:00 A   12018-01-01 01:00:00 A   22018-01-01 02:00:00 A   32018-01-01 03:00:00 A   42018-01-01 04:00:00 A   52018-01-01 05:00:00 A   62018-01-01 06:00:00 A   62018-01-03 07:00:00 B   102018-01-03 08:00:00 B   112018-01-03 09:00:00 B   122018-01-03 10:00:00 B   132018-01-03 11:00:00 B   142018-01-03 12:00:00 B   152018-01-03 13:00:00 B   162018-05-29 23:00:00 C   1112018-05-30 00:00:00 C   1222018-05-30 01:00:00 C   1332018-05-30 02:00:00 C   1442018-05-30 03:00:00 C   155''')df = pd.read_csv(csv, sep = '\t')df['time'] = pd.to_datetime(df['time'])csv_filter = io.StringIO(u'''id  start   endA   2018-01-01 01:00:00 2018-01-01 02:00:00B   2018-01-03 09:00:00 2018-01-03 12:00:00C   2018-05-30 00:00:00 2018-05-30 08:00:00''')df_filter = pd.read_csv(csv_filter, sep = '\t')df_filter['start'] = pd.to_datetime(df_filter['start'])df_filter['end'] = pd.to_datetime(df_filter['end'])工作代碼df = pd.merge_asof(df, df_filter, left_on = 'time', right_on = 'start', by = 'id').dropna(subset = ['start']).drop(['start','end'], axis = 1)df = pd.merge_asof(df, df_filter, left_on = 'time', right_on = 'end', by = 'id', direction = 'forward').dropna(subset = ['end']).drop(['start','end'], axis = 1)輸出                  time id  num0  2018-01-01 01:00:00  A    21  2018-01-01 02:00:00  A    36  2018-01-03 09:00:00  B   127  2018-01-03 10:00:00  B   138  2018-01-03 11:00:00  B   149  2018-01-03 12:00:00  B   1511 2018-05-30 00:00:00  C  12212 2018-05-30 01:00:00  C  13313 2018-05-30 02:00:00  C  14414 2018-05-30 03:00:00  C  155關(guān)于更優(yōu)雅/更快的解決方案的任何想法?
查看完整描述

1 回答

?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊

為什么不是merge在過濾之前。請(qǐng)注意,當(dāng)數(shù)據(jù)集很大時(shí),這會(huì)占用您的內(nèi)存。


newdf=df.merge(df_filter)

newdf=newdf.loc[newdf.time.between(newdf.start,newdf.end),df.columns.tolist()]

newdf

Out[480]: 

                  time id  num

1  2018-01-01 01:00:00  A    2

2  2018-01-01 02:00:00  A    3

9  2018-01-03 09:00:00  B   12

10 2018-01-03 10:00:00  B   13

11 2018-01-03 11:00:00  B   14

12 2018-01-03 12:00:00  B   15

15 2018-05-30 00:00:00  C  122

16 2018-05-30 01:00:00  C  133

17 2018-05-30 02:00:00  C  144

18 2018-05-30 03:00:00  C  155


查看完整回答
反對(duì) 回復(fù) 2021-10-12
  • 1 回答
  • 0 關(guān)注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)