我对编程还很陌生,并且我肯定有很多解决方案,但是就目前而言,我的似乎行不通。我有一个包含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)
请帮助!
答案 0 :(得分:0)
您可以按列求和,并过滤出总和低于某个特定值的列,请记住,该和代表事件的总数:
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)