【问题标题】:Row selection in data frame based on condition基于条件的数据框中的行选择
【发布时间】:2022-01-26 09:26:18
【问题描述】:

下面的数据框有时间序列数据

| datetime                | mc | quality | v0 | v1 | v2 | v5 | v6 | v7   | v8 | v9 | v10 |
|-------------------------|----|---------|----|----|----|----|----|------|----|----|-----|
| 2021-12-27 14:00:56.420 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5515 | 0  | 0  | 0   |
| 2021-12-27 14:01:25.267 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5507 | 0  | 0  | 0   |
| 2021-12-27 14:01:54.113 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5524 | 0  | 0  | 0   |
| 2021-12-27 14:02:22.897 | L2 | 192     | 1  | 5  | 6  | 1  | 0  | 5513 | 0  | 0  | 0   |
| 2021-12-27 14:02:51.747 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5455 | 0  | 0  | 0   |
| 2021-12-27 14:03:51.743 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5522 | 7  | 3  | 9   |
| 2021-12-27 14:04:51.743 | L2 | 192     | 1  | 4  | 0  | 0  | 0  | 5522 | 7  | 3  | 9   |

要求: 我需要选择 v1 或 v9 不等于 '0' 的行

| datetime                | mc | quality | v0 | v1 | v2 | v5 | v6 | v7   | v8 | v9 | v10 |
|-------------------------|----|---------|----|----|----|----|----|------|----|----|-----|
| 2021-12-27 14:02:22.897 | L2 | 192     | 1  | 5  | 6  | 1  | 0  | 5513 | 0  | 0  | 0   |
| 2021-12-27 14:03:51.743 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5522 | 7  | 3  | 9   |
| 2021-12-27 14:04:51.743 | L2 | 192     | 1  | 4  | 0  | 0  | 0  | 5522 | 7  | 3  | 9   |

试验:

df = df[df.v1 != 0]

如果我单独选择它会起作用

df = df[(df.v1 != 0) & (df.v9 != 0)]

但如果我设置条件不起作用,我会得到空数据框。

想知道有效的方法

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    | 用于按位OR

    df1 = df[(df.v1 != 0) | (df.v9 != 0)]
    print (df1)
                     datetime  mc  quality  v0  v1  v2  v5  v6    v7  v8  v9  v10
    3 2021-12-27 14:02:22.897  L2      192   1   5   6   1   0  5513   0   0    0
    5 2021-12-27 14:03:51.743  L2      192   1   0   0   0   0  5522   7   3    9
    6 2021-12-27 14:04:51.743  L2      192   1   4   0   0   0  5522   7   3    9
    

    如果布尔数据帧中至少有一个True,则使用DataFrame.any 测试两列以获取行:

    df1 = df[(df[['v1','v9']] != 0).any(axis=1)]
    print (df1)
                     datetime  mc  quality  v0  v1  v2  v5  v6    v7  v8  v9  v10
    3 2021-12-27 14:02:22.897  L2      192   1   5   6   1   0  5513   0   0    0
    5 2021-12-27 14:03:51.743  L2      192   1   0   0   0   0  5522   7   3    9
    6 2021-12-27 14:04:51.743  L2      192   1   4   0   0   0  5522   7   3    9
    

    【讨论】:

    • 我有一个问题。假设如果数据框体积很大,使用'|'是否更好?或二维一
    • @user_v27 - 首先。如果需要测试,第二个更好。 100 列,
    • 哦!好的。谢谢!
    猜你喜欢
    • 2020-05-18
    • 2016-09-29
    • 1970-01-01
    • 2016-10-06
    • 2013-04-20
    • 2013-01-30
    • 1970-01-01
    • 2018-08-15
    • 2018-03-02
    相关资源
    最近更新 更多