Python 基于多列筛选数据帧,每列具有多个值

Python 基于多列筛选数据帧,每列具有多个值,python,pandas,Python,Pandas,希望有人能帮助我 给定每列一个值,我成功地过滤了一个数据帧(如下面的代码所示)。但是,根据我正在运行的分析,有时我希望避免指定要筛选的值(例如,我希望忽略seg_设备的筛选,并仅基于操作系统筛选数据帧) 然而,下面的代码迫使我总是指定一些值(例如桌面)。如果我将seg\u device留空,df\u ch\u seg将不返回任何数据,条件是df\u ch.device==seg\u device 有人对如何使我的代码更灵活有什么建议吗?我的数据集由每16列100万行组成。下面您只看到2个过滤器,

希望有人能帮助我

给定每列一个值,我成功地过滤了一个数据帧(如下面的代码所示)。但是,根据我正在运行的分析,有时我希望避免指定要筛选的值(例如,我希望忽略seg_设备的筛选,并仅基于操作系统筛选数据帧)

然而,下面的代码迫使我总是指定一些值(例如桌面)。如果我将
seg\u device
留空,
df\u ch\u seg
将不返回任何数据,条件是
df\u ch.device==seg\u device

有人对如何使我的代码更灵活有什么建议吗?我的数据集由每16列100万行组成。下面您只看到2个过滤器,但我总共有15个(其中一些是整数,一些是字符串和列)。谢谢大家!

通过查看下面的代码,我想对其稍作修改,使其能够在多种情况下工作:

  • 如果我想通过一个设备(例如移动设备)进行过滤
  • 如果我想通过2个设备(例如移动设备、桌面设备)进行过滤
  • 如果我不想按设备筛选(我希望我的代码忽略按设备筛选)

如果我理解正确的话,您只想将其应用到一个函数中,其中提供的输入将是(column,filter_value)的元组

那么你可以这样称呼它

mask = mask_constructor(("device", "iPhone"), ("os", "iOS"))
df_ch[mask]

也许这段代码能帮上忙。这里的“a”是seg_设备,“b”是seg_操作系统。所以确保a=''和b=''。如果未指定(输入)'a',则'a'将设置为df['a'],因此该列中的所有值都将有效。对于“b”和数据框中的其他列也可以这样做。希望这是清楚的

d = {'A':['a','b','a','b','a'], 'B':[1,2,3,4,5]}
df = pd.DataFrame(data=d)

a ='' # a is not specified and remains empty
if a=='': 
  a=df['A'] # set 'a' to all values in df['A'] 
b=1

(df['A']==a) & (df['B']>b)

这回答了你的问题吗?嗨@Deepak,不幸的是它没有应答。我可以给你更多关于这个例子的信息。在我的数据库中,我有3个允许插入的“设备”值(移动、桌面、平板电脑)。通过查看上面的代码,我想稍微修改一下,使其能够在多种情况下工作:-如果我想通过一个设备(例如移动设备)进行过滤-如果我想通过两个设备(例如移动设备、桌面设备)进行过滤-如果我不想通过设备进行过滤(我希望我的代码忽略通过设备进行过滤),谢谢!不幸的是,这还不能解决问题。它允许我使用列表过滤2个值,但不能忽略过滤。我编辑了问题的最后一部分,以提供更多信息和示例。再次感谢您是的,但是在这个函数中,您可以传递所需的列和筛选器。如果您不想使用特定的列,请不要将其传入。
mask = mask_constructor(("device", "iPhone"), ("os", "iOS"))
df_ch[mask]
d = {'A':['a','b','a','b','a'], 'B':[1,2,3,4,5]}
df = pd.DataFrame(data=d)

a ='' # a is not specified and remains empty
if a=='': 
  a=df['A'] # set 'a' to all values in df['A'] 
b=1

(df['A']==a) & (df['B']>b)