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

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

在 Panda DataFrame 中過濾 groupby 數(shù)據(jù)的有效方法

在 Panda DataFrame 中過濾 groupby 數(shù)據(jù)的有效方法

藍(lán)山帝景 2022-05-24 18:13:26
問題我有兩個數(shù)據(jù)框Frame A(保存一些原始數(shù)據(jù))和Frame B(保存閾值數(shù)據(jù))。我的目標(biāo)是對于Frame B我想要返回的每個 id 中的相應(yīng) id 的Frame A行<= b['A']。我寫的代碼工作正常,我的問題是效率。框架 B 有大約 100K 行,而框架 A 有大約 1M 行。根據(jù)快速計算,我需要大約 6 個小時來過濾我的數(shù)據(jù)。雖然 6 小時可能是可行的(我可以讓它在一夜之間運行),但這個數(shù)據(jù)集代表了我數(shù)據(jù)的一小部分樣本,約占我總數(shù)據(jù)集的 5%。我試過的import pandas as pdfrom io import StringIOdata1 = """id,A,B,C,D123,2019-09-10 00:00:00,1,True,False123,2019-09-10 00:10:00,1,True,False123,2019-09-11 00:07:00,1,True,False456,2019-09-05 01:00:00,1,True,False456,2019-09-08 10:00:00,1,True,False789,2019-09-10 10:00:00,1,True,False789,2019-09-11 00:50:00,1,True,False789,2019-09-12 12:00:00,1,True,False"""data2 = """id,A,B123,2019-09-10 00:10:00,1456,2019-09-05 01:00:00,1789,2019-09-12 12:00:00,1"""df_a = pd.read_csv(StringIO(data1))df_b = pd.read_csv(StringIO(data2))dfs = []for Id in df_b.id.unique():    df = df_a[df_a.id == Id]    df = df[df['A'] <= df_b[df_b.id == Id]['A'].values[0]]    dfs.append(df)print(pd.concat(dfs))數(shù)據(jù)期望的輸出    id                    A  B     C      D0  123  2019-09-10 00:00:00  1  True  False1  123  2019-09-10 00:10:00  1  True  False3  456  2019-09-05 01:00:00  1  True  False5  789  2019-09-10 10:00:00  1  True  False6  789  2019-09-11 00:50:00  1  True  False7  789  2019-09-12 12:00:00  1  True  False框架 A   id                    A  B     C      D0  123  2019-09-10 00:00:00  1  True  False1  123  2019-09-10 00:10:00  1  True  False2  123  2019-09-11 00:07:00  1  True  False3  456  2019-09-05 01:00:00  1  True  False4  456  2019-09-08 10:00:00  1  True  False5  789  2019-09-10 10:00:00  1  True  False6  789  2019-09-11 00:50:00  1  True  False7  789  2019-09-12 12:00:00  1  True  False幀 B    id                    A  B0  123  2019-09-10 00:10:00  11  456  2019-09-05 01:00:00  12  789  2019-09-12 12:00:00  1
查看完整描述

1 回答

?
慕哥9229398

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

使用map


s = df_a.id.map(dict(df_b[['id', 'A']].values))

df_a[df_a.A <= s]


Out[35]:

    id                   A  B     C      D

0  123 2019-09-10 00:00:00  1  True  False

1  123 2019-09-10 00:10:00  1  True  False

3  456 2019-09-05 01:00:00  1  True  False

5  789 2019-09-10 10:00:00  1  True  False

6  789 2019-09-11 00:50:00  1  True  False

7  789 2019-09-12 12:00:00  1  True  False

使用左merge和query


(df_a.merge(df_b[['id', 'A']], on='id', how='left', suffixes=('','_y'))

     .query('A <= A_y').drop('A_y', 1))


Out[43]:

    id                   A  B     C      D

0  123 2019-09-10 00:00:00  1  True  False

1  123 2019-09-10 00:10:00  1  True  False

3  456 2019-09-05 01:00:00  1  True  False

5  789 2019-09-10 10:00:00  1  True  False

6  789 2019-09-11 00:50:00  1  True  False

7  789 2019-09-12 12:00:00  1  True  False


查看完整回答
反對 回復(fù) 2022-05-24
  • 1 回答
  • 0 關(guān)注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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