运行 针对 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 的布尔测试结果。
我正在尝试通过将条件应用于列(以逻辑表达式的形式)来从 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 的布尔测试结果。