Python 基于多列筛选数据帧,每列具有多个值
希望有人能帮助我 给定每列一个值,我成功地过滤了一个数据帧(如下面的代码所示)。但是,根据我正在运行的分析,有时我希望避免指定要筛选的值(例如,我希望忽略seg_设备的筛选,并仅基于操作系统筛选数据帧) 然而,下面的代码迫使我总是指定一些值(例如桌面)。如果我将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\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)