对条件列表(掩码)施加 OR python pandas
Impose OR on a list of conditions (masks) python pandas
我有以下类型的数据框:
dummy1 dummy2 dummy3 ... dummy8 dummy9 dummy10
Date ID ...
1998-01-01 X 1 NaN NaN ... NaN NaN NaN
Y 1 NaN NaN ... NaN NaN NaN
1998-01-02 X NaN NaN NaN ... NaN NaN NaN
Y NaN NaN NaN ... NaN NaN NaN
1998-01-05 X NaN NaN NaN ... NaN NaN NaN
... ... ... ... ... ... ...
2016-12-27 Y NaN 1 NaN ... NaN NaN NaN
2016-12-28 X NaN 1 NaN ... NaN NaN NaN
Y NaN NaN NaN ... NaN NaN NaN
2016-12-29 X NaN NaN NaN ... NaN 1 NaN
Y NaN NaN NaN ... NaN 1 NaN
现在,我有一个布尔系列列表,它对应于我称之为 mask
的数据帧的特定掩码。这意味着 mask
包含多个元素(特别是:数据帧的每个虚拟元素),例如 mask[0]
类型,即:
Date Index
1998-01-01 X True
Y True
1998-01-02 X False
Y False
1998-01-05 X False
...
2016-12-27 Y False
2016-12-28 X False
Y False
2016-12-29 X False
Y False
现在,无论我如何构建 mask
系列(如果数据框中相应的虚拟对象为 1,它们都是 True),我想应用以下命令:
df_new=df[masks[0] | masks[1] | masks[2] | masks[3] | masks[4] | masks[5] | masks[6] | masks[7] | masks[8] | masks[9]]
这意味着我想将列表 mask
中包含的所有掩码与 OR 运算符同时应用到我的数据帧 df
上。如何以 'authomatic' 的方式进行操作而不需要手动指定 mask
的所有元素?能够 'automize' 这部分作为函数的一部分非常重要,该函数根据数据帧列中的虚拟元素数量创建许多不同的 mask
元素
如何创建一个遍历掩码列表的函数?
def filter_many_or(list_of_masks):
aggregate_mask = list_of_masks[0]
for mask in list_of_masks[1:]:
aggregate_mask = aggregate_mask | mask
return aggregate_mask
我有以下类型的数据框:
dummy1 dummy2 dummy3 ... dummy8 dummy9 dummy10
Date ID ...
1998-01-01 X 1 NaN NaN ... NaN NaN NaN
Y 1 NaN NaN ... NaN NaN NaN
1998-01-02 X NaN NaN NaN ... NaN NaN NaN
Y NaN NaN NaN ... NaN NaN NaN
1998-01-05 X NaN NaN NaN ... NaN NaN NaN
... ... ... ... ... ... ...
2016-12-27 Y NaN 1 NaN ... NaN NaN NaN
2016-12-28 X NaN 1 NaN ... NaN NaN NaN
Y NaN NaN NaN ... NaN NaN NaN
2016-12-29 X NaN NaN NaN ... NaN 1 NaN
Y NaN NaN NaN ... NaN 1 NaN
现在,我有一个布尔系列列表,它对应于我称之为 mask
的数据帧的特定掩码。这意味着 mask
包含多个元素(特别是:数据帧的每个虚拟元素),例如 mask[0]
类型,即:
Date Index
1998-01-01 X True
Y True
1998-01-02 X False
Y False
1998-01-05 X False
...
2016-12-27 Y False
2016-12-28 X False
Y False
2016-12-29 X False
Y False
现在,无论我如何构建 mask
系列(如果数据框中相应的虚拟对象为 1,它们都是 True),我想应用以下命令:
df_new=df[masks[0] | masks[1] | masks[2] | masks[3] | masks[4] | masks[5] | masks[6] | masks[7] | masks[8] | masks[9]]
这意味着我想将列表 mask
中包含的所有掩码与 OR 运算符同时应用到我的数据帧 df
上。如何以 'authomatic' 的方式进行操作而不需要手动指定 mask
的所有元素?能够 'automize' 这部分作为函数的一部分非常重要,该函数根据数据帧列中的虚拟元素数量创建许多不同的 mask
元素
如何创建一个遍历掩码列表的函数?
def filter_many_or(list_of_masks):
aggregate_mask = list_of_masks[0]
for mask in list_of_masks[1:]:
aggregate_mask = aggregate_mask | mask
return aggregate_mask