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

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

Pandas 根據(jù)條件計(jì)算其他 df 中的行數(shù)

Pandas 根據(jù)條件計(jì)算其他 df 中的行數(shù)

慕的地8271018 2023-07-11 10:38:00
我有 2 個(gè) dfs:df 和 df0df 看起來(lái)像這樣:foo bar bazA   1   5A   1   10A   1   18A   2   14A   2   18A   2   22A   6   6A   6   15df0 像這樣:foo bar bazA   1   0A   2   7A   6   5在兩個(gè) dfs 中,“foo”可以采用除“A”之外的其他值。我想向 df 的每一行添加 df0 的行數(shù),其中 row.foo == df0.foo 且 row.bar < df0.bar 且 row.baz >= df0.baz。因此,輸出將是:foo bar baz nA   1   5   0A   1   10  2A   1   18  2A   2   14  1A   2   18  1A   2   22  1A   6   6   0A   6   15  0我有一個(gè)工作版本(如下),但它迭代 df,這本質(zhì)上很慢(約 30 次迭代/秒,df 可以有數(shù)百萬(wàn)行)。是否有矢量化/更快的方法來(lái)完成相同的任務(wù)?rows = []for row in df.itertuples():     rows.append([row.baz, row.foo, row.bar, len(df0.loc[(row.bar < df0.bar) & (row.baz >= df0.baz) & (row.foo == df0.foo)])])df = pd.DataFrame(rows, columns=["baz", "foo", "bar", "n"])
查看完整描述

1 回答

?
楊魅力

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

我們可以通過(guò)做一個(gè)來(lái)實(shí)現(xiàn)這一點(diǎn)outer merge。檢查您的條件并最終使用GroupBy.sum以獲得您的n專欄:


dfm = df.assign(key=df.index).merge(df0, on='foo', suffixes=['', '_0'])

m = (dfm['bar'] < dfm['bar_0']) & (dfm['baz'] >= dfm['baz_0'])

df['n'] = m.groupby(dfm['key']).sum()


  foo  bar  baz  n

0   A    1    5  1

1   A    1   10  2

2   A    1   18  2

3   A    2   14  1

4   A    2   18  1

5   A    2   22  1

6   A    6    6  0

7   A    6   15  0


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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