运行 针对 pandas 数据框的逻辑表达式

Run logical Expressions against pandas dataframe

我正在尝试通过将条件应用于列(以逻辑表达式的形式)来从 pandas 数据框中获取 select 行。

示例数据框如下所示:

    id             userid                code
    0            645382311          12324234234
    1            645382311          -2434234242
    2            645382312          32536365654
    3            645382312          12324234234

...

例如,我希望通过对列 'code':

应用逻辑表达式来获得下一个结果
    case 1: (12324234234 OR -2434234242) AND NOT 32536365654
    case 2: (12324234234 AND -2434234242) OR NOT 32536365654
    must give a result for both cases:
    userid: 645382311

上面的逻辑说: 对于案例 1 - 只给我那些至少具有值之一(12324234234 或 -2434234242)并且在整个数据框中没有 32536365654 的用户标识。 对于案例 2 - 我只需要那些在数据框中具有两个代码(12324234234 和 -2434234242)或任何代码但不是 32536365654 的用户标识。

如下语句returns 空DataFrame:

    flt = df[(df.code == 12324234234) & (df.code == -2434234242)]
    print("flt: ", flt)

结果(有意义):

    flt:  Empty DataFrame

对于处理此类情况的任何提示,我们将不胜感激。

作为一种简单的方法,我会将您的示例 table 转换为布尔存在矩阵,然后您可以执行所需的逻辑:

import pandas
sample = pandas.DataFrame([[645382311, 12324234234], [645382311, -2434234242], [645382312, 32536365654], [645382312, 12324234234]], columns=['userid', 'code'])
# Add a column of True values
sample['value'] = True
# Pivot to boolean presence matrix and remove MultiIndex
presence = sample.pivot(index='userid', columns='code').fillna(False)['value']
# Perform desired boolean tests
case1 = (presence[12324234234] | presence[-2434234242]) & ~(presence[32536365654])
case2 = (presence[12324234234] & presence[-2434234242]) | ~(presence[32536365654])

case 变量将包含每个用户 ID 的布尔测试结果。