Удаление каждого n-много столбцов в пандусе DataFrame - PullRequest
1 голос
/ 23 сентября 2019

У меня есть 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]]

IsЕсть ли способ получить уменьшенный вывод, который я желаю выше, через все 432 столбца?

Ответы [ 2 ]

4 голосов
/ 23 сентября 2019

Вот один из подходов:

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
0 голосов
/ 23 сентября 2019

Просто вычислите индекс столбца:

Для уменьшенного примера:

cols = [col for i, col in enumerate(df.columns) if i%7 < 5]
df_reduced = df[cols]

Для большего примера:

cols = [col for i, col in enumerate(df.columns) if i%48 < 36]
df_reduced = df[cols]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...