簡體   English   中英

pandas select Z6A8064B5DF4794555500553C47C55057DZ 行根據配對條件

[英]pandas select dataframe rows according to pair condition

我有一個 dataframe 如下所示:

df = pd.DataFrame({
    'contract':[11, 11, 11, 12, 12, 13, 13, 13, 13], 
    'num_date':[1, 2, 3, 1, 2, 1, 2, 3, 4],
    'val': [100, 110, 120, 50, 150, 95, 105, 115, 125]
})

對(合同,num_date)是唯一的

我也有元組列表:

filt = [(11, 1),
        (11, 1),
        (12, 3),
        (12, 2),
        (13, 3),
        (13, 1)]

列表中的每個元組都是上面 dataframe 的一對 (contract, num_date)。

我需要根據此列表從 dataframe 中選擇行作為條件,如果元組重復多次,則與其對應的行也必須重復相同的次數。

例如對於 dataframe 和上述解決方案的元組列表是

合同 num_date
11 1 100
11 1 100
12 2 150
13 3 115
13 1 95

如果解決方案具有時間效率會更好

首先,您需要將元組轉換為 dataframe:

df2 = pd.DataFrame(filt)
df2.columns = ['contract', 'num_date']

然后在兩者之間合並並刪除空值:

df2 = df2.merge(right=df, on = ['contract', 'num_date'], how='left')
df2.dropna(subset=['val'], inplace=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM