如何使用列值的组合来过滤数据并创建子集?

时间:2018-07-23 21:27:36

标签: python pandas dataframe pandas-groupby

我是python的新手,希望在扩展我正在研究的项目时获得一些帮助。

我有一个包含25列的数据集。我需要通过3个特定列的唯一组合来过滤该数据。然后将每个唯一过滤器命名为一个子集(最好只是3列中的每个值的组合)。

因此,我有代码来查找仅需要的三列的唯一组合。我认为这将是一个好的开始。

unique = m_nlsn[['Market Break','Demographic', 'Playback Period']].drop_duplicates(subset=['Market Break','Demographic', 'Playback Period'])

现在,我需要知道如何使用这些独特的组合来过滤和命名子集?例如,如果我有10个唯一的组合,则需要基于这3个特定列中的值的10个不同的子集。如下所示,我正在手动过滤唯一组合。

comp_hh_live = m_nlsn.loc[(m_nlsn['Market Break'] == "Composite") 
                 & (m_nlsn['Demographic'] == "Household")
                 & (m_nlsn['Playback Period'] == "Live | TV with Digital | Linear with VOD")]

非常感谢所有帮助。

1 个答案:

答案 0 :(得分:0)

使用字典存储可变数量的变量

在这种情况下,您可以将dictgroupby一起使用。这样做的好处是您不需要显式地计算唯一组合,因为GroupBy对象可以解决这个问题。

d = dict(tuple(m_nlsn.groupby(['Market Break', 'Demographic', 'Playback Period'])))

然后您可以通过元组键访问各个组。将它们分配给变量也很简单。例如:

comp_hh_live = d[('Composite', 'Household', 'Live | TV with Digital | Linear with VOD')]

如果您觉得这太冗长,建议您使用Categorical Data来设置和重命名类别。使用此方法还将通过降低内存使用量提供其他好处。