如何用二进制类过滤掉python中低于特定频率的列?

如何用二进制类过滤掉python中低于特定频率的列?,python,pandas,count,scikit-learn,multiple-columns,Python,Pandas,Count,Scikit Learn,Multiple Columns,我对编程相当陌生,我确信存在许多解决方案,但就目前而言,我的解决方案似乎不起作用。我有一个超过200个预测变量的数据集,其中大多数是二进制1=事件,0=无事件。我想过滤掉发生频率低于某个阈值的所有变量,例如100次 我试过这样的方法: diag = luisa.T.reset_index().rename(columns = {'index': 'diagnosis'}) frequency = pd.concat([diag.iloc[:,:1],pd.DataFrame(diag.sum

我对编程相当陌生,我确信存在许多解决方案,但就目前而言,我的解决方案似乎不起作用。我有一个超过200个预测变量的数据集,其中大多数是二进制1=事件,0=无事件。我想过滤掉发生频率低于某个阈值的所有变量,例如100次

我试过这样的方法:

diag = luisa.T.reset_index().rename(columns = {'index': 'diagnosis'}) 

frequency = pd.concat([diag.iloc[:,:1],pd.DataFrame(diag.sum(1))], axis = 1).rename(columns = {0:'count'}) 

frequency.nlargest(150,'count) 

请帮忙

您可以按列求和并过滤出总和低于某个值的列,记住总和表示事件总数:

threshold = 100

col_sum = df.sum()
filtered_df = df[col_sum[col_sum > threshold].index]
这将在
filtered_df
中存储原始
DataFrame
的子集,而不包含这些列

如果并非所有列都是二进制的,则需要包括仅对二进制列执行此操作的附加步骤,然后反转条件以查找不符合条件的列:

binary_columns = df.isin([0, 1]).all(axis=0)
binary_df = df.loc[:, binary_columns]
col_sum = binary_df.sum()

filtered_df = df.drop(columns=col_sum[col_sum < threshold].index)
binary_columns=df.isin([0,1]).all(axis=0)
二进制_df=df.loc[:,二进制_列]
col_sum=二进制函数
已筛选的列df=df.drop(列=col\u sum[col\u sum
您可以按列求和并过滤出总和低于某个值的列,记住总和代表事件总数:

threshold = 100

col_sum = df.sum()
filtered_df = df[col_sum[col_sum > threshold].index]
这将在
filtered_df
中存储原始
DataFrame
的子集,而不包含这些列

如果并非所有列都是二进制的,则需要包括仅对二进制列执行此操作的附加步骤,然后反转条件以查找不符合条件的列:

binary_columns = df.isin([0, 1]).all(axis=0)
binary_df = df.loc[:, binary_columns]
col_sum = binary_df.sum()

filtered_df = df.drop(columns=col_sum[col_sum < threshold].index)
binary_columns=df.isin([0,1]).all(axis=0)
二进制_df=df.loc[:,二进制_列]
col_sum=二进制函数
已筛选的列df=df.drop(列=col\u sum[col\u sum
哦,真是又快又有效,似乎工作得很完美!非常感谢@gmdsOh真的快速有效,似乎工作得很完美!非常感谢@gmds