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

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

將多個過濾器應用于pandas DataFrame或Series的有效方法

將多個過濾器應用于pandas DataFrame或Series的有效方法

MMTTMM 2019-11-06 11:15:02
我有一個場景,用戶想要將多個過濾器應用于Pandas DataFrame或Series對象。本質上,我想有效地將用戶在運行時指定的一堆過濾(比較操作)鏈接在一起。過濾器應為可加性的(又稱每個過濾器應縮小結果)。我目前正在使用,reindex()但這每次都會創建一個新對象并復制基礎數據(如果我正確理解了文檔)。因此,這在篩選大型Series或DataFrame時可能效率很低。我認為使用apply(),map()或類似的方法可能更好。我對Pandas來說還很陌生,所以仍然想盡一切辦法。TL; DR我想采用以下形式的字典,并將每個操作應用于給定的Series對象,然后返回“已過濾” Series對象。relops = {'>=': [1], '<=': [1]}長例子我將從當前的示例開始,僅過濾單個Series對象。以下是我當前正在使用的功能:   def apply_relops(series, relops):        """        Pass dictionary of relational operators to perform on given series object        """        for op, vals in relops.iteritems():            op_func = ops[op]            for val in vals:                filtered = op_func(series, val)                series = series.reindex(series[filtered])        return series用戶向字典提供他們要執行的操作:>>> df = pandas.DataFrame({'col1': [0, 1, 2], 'col2': [10, 11, 12]})>>> print df>>> print df   col1  col20     0    101     1    112     2    12>>> from operator import le, ge>>> ops ={'>=': ge, '<=': le}>>> apply_relops(df['col1'], {'>=': [1]})col11       12       2Name: col1>>> apply_relops(df['col1'], relops = {'>=': [1], '<=': [1]})col11       1Name: col1同樣,我上述方法的“問題”是,我認為在步驟之間存在很多不必要的數據復制。另外,我想對此進行擴展,以便傳入的字典可以包含要操作的列,并根據輸入字典過濾整個DataFrame。但是,我假設該系列的所有工作都可以輕松擴展到DataFrame。
查看完整描述

3 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

由于pandas 0.22更新了,因此提供了以下比較選項:


gt(大于)

lt(小于)

eq(等于)

ne(不等于)

ge(大于或等于)

還有很多。這些函數返回布爾數組。讓我們看看如何使用它們:


# sample data

df = pd.DataFrame({'col1': [0, 1, 2,3,4,5], 'col2': [10, 11, 12,13,14,15]})


# get values from col1 greater than or equals to 1

df.loc[df['col1'].ge(1),'col1']


1    1

2    2

3    3

4    4

5    5


# where co11 values is better 0 and 2

df.loc[df['col1'].between(0,2)]


 col1 col2

0   0   10

1   1   11

2   2   12


# where col1 > 1

df.loc[df['col1'].gt(1)]


 col1 col2

2   2   12

3   3   13

4   4   14

5   5   15


查看完整回答
反對 回復 2019-11-06
  • 3 回答
  • 0 關注
  • 837 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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