首页 > 解决方案 > 删除 Pandas DataFrame 中的每 n 列

问题描述

我有一个 DataFrame,我想通过保留每 36 列并删除每 18 列来减少它;即:对于每 36 列,接下来的 18 列将被删除,然后从接下来的 36 列重复,直到 DataFrame 结束。

DataFrame 是 (11, 432) 但每 5 列(而不是 36 列)删除 2 列(而不是 18 列)的工作示例如下所示:

df = pd.DataFrame({'0':[1, 12, 13, 15, 10, 5, 6, 10, 21, 2, 3, 14, 8, 22, 12], '1':[11, 2, 43, 6, 12, 5, 6, 10, 22, 2, 3, 14, 4, 1, 5]}).T

df_reduced_example

     0    1    2    3    4    7    8    9   10   11   14
0    1    12   13   15   10   10   21   2   3    14   12
1    11   2    43   6    12   10   22   2   3    14   5

到目前为止,我似乎只能获得每 37 列的每个起点:

df_reduced = df[df.columns[36::18]]

有没有办法通过所有 432 列获得我想要的减少输出?

标签: pythonpython-3.xpandasdataframe

解决方案


这是一种方法:

col_to_keep = 5
col_to_drop = 2
period =  col_to_keep + col_to_drop

s = (np.arange(len(df.columns)) % period) < col_to_keep
df.loc[:,s]

输出:

   0   1   2   3   4   7   8   9   10  11  14
0   1  12  13  15  10  10  21   2   3  14  12
1  11   2  43   6  12  10  22   2   3  14   5

推荐阅读