为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号