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

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

Pandas 根據前 n 行的條件過濾數據框

Pandas 根據前 n 行的條件過濾數據框

眼眸繁星 2021-12-17 14:36:14
我有一個形狀為 [600 000, 19] 的數據框。我想根據一個條件過濾前 100 000 行,根據另一個條件過濾下 300 000 行,以及最后一行的第三個條件。我想知道如何做到這一點。目前,我將數據框分成 3 個段并應用它們各自的條件。然后,我重新連接數據框。有沒有更好的辦法?示例:根據小于 5 的任何值過濾前 100 000 行。對于第二個 300 000 行,我不想要任何大于 40 的值,等等。
查看完整描述

2 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

您可以嘗試以下方法:


import pandas as pd


sample = pd.DataFrame({'x' : pd.np.arange(100),

                       'colname': pd.np.arange(100)})

conditions = [('index < 5', 'colname < 3'), 

              ('index > 50', 'index < 100', 'colname < 55')]

sample.query('|'.join(map(lambda x: '&'.join(x), conditions)))


查看完整回答
反對 回復 2021-12-17
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

方法是使用數據幀索引切片pd.concat來構建完整的布爾系列:


import numpy as np

import pandas as pd

np.random.seed(0)

df=pd.DataFrame(np.random.randint(0,50,60))


df[pd.concat([df.iloc[:10] > 10, df[11:40] < 30, df[41:] % 2 == 0])]

前 10 條記錄過濾小于 10 的值,接下來的 30 個值過濾大于 30 的值,最后一個值檢查偶數。


然后您可以使用 dropna 刪除所有 NaN 值


輸出:


      0

0   44.0

1   47.0

2    NaN

3    NaN

4    NaN

5   39.0

6    NaN

7   19.0

8   21.0

9   36.0

10   NaN

11   6.0

12  24.0

13  24.0

14  12.0

15   1.0

16   NaN

17   NaN

18  23.0

19   NaN

20  24.0

21  17.0

22   NaN

23  25.0

24  13.0

25   8.0

26   9.0

27  20.0

28  16.0

29   5.0

30  15.0

31   NaN

32   0.0

33  18.0

34   NaN

35  24.0

36   NaN

37  29.0

38  19.0

39  19.0

40   NaN

41   NaN

42  32.0

43   NaN

44   NaN

45  32.0

46   NaN

47  10.0

48   NaN

49   NaN

50   NaN

51  28.0

52  34.0

53   0.0

54   0.0

55  36.0

56   NaN

57  38.0

58  40.0

59   NaN


查看完整回答
反對 回復 2021-12-17
  • 2 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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