add_suffix к имени столбца на основе позиции - PullRequest
0 голосов
/ 01 октября 2018

У меня есть набор данных, в который я хочу добавить суффикс к именам столбцов на основе их позиций.Для столбцов с 1-го по 4-й должны быть названы «abc_1», затем с 5-го по 8-й столбцы как «abc_2» и так далее.

Я пытался использовать dataframe.rename
, но это трудоемкий процесс.Какой самый эффективный способ добиться этого?

1 Ответ

0 голосов
/ 01 октября 2018

Я думаю, что здесь хороший выбор: создайте MultiIndex, чтобы избежать дублирования имен столбцов - создайте первый уровень по полу, разделив его на 4 и добавив префикс f-string s:

np.random.seed(123)

df = pd.DataFrame(np.random.randint(10, size=(5, 10)))

df.columns = [[f'abc_{i+1}' for i in df.columns // 4], df.columns]
print (df)
  abc_1          abc_2          abc_3   
      0  1  2  3     4  5  6  7     8  9
0     2  2  6  1     3  9  6  1     0  1
1     9  0  0  9     3  4  0  0     4  1
2     7  3  2  4     7  2  4  8     0  7
3     9  3  4  6     1  5  6  2     1  8
4     3  5  0  2     6  2  4  4     6  3

Более общее решениеесли в именах столбцов нет RangeIndex:

cols = [f'abc_{i+1}' for i in np.arange(len(df.columns)) // 4]
df.columns = [cols, df.columns]
print (df)
  abc_1          abc_2          abc_3   
      0  1  2  3     4  5  6  7     8  9
0     2  2  6  1     3  9  6  1     0  1
1     9  0  0  9     3  4  0  0     4  1
2     7  3  2  4     7  2  4  8     0  7
3     9  3  4  6     1  5  6  2     1  8
4     3  5  0  2     6  2  4  4     6  3

Также возможно указывать имена уровней MultiIndex с помощью MultiIndex.from_arrays:

df.columns = pd.MultiIndex.from_arrays([cols, df.columns], names=('level0','level1'))
print (df)
level0 abc_1          abc_2          abc_3   
level1     0  1  2  3     4  5  6  7     8  9
0          2  2  6  1     3  9  6  1     0  1
1          9  0  0  9     3  4  0  0     4  1
2          7  3  2  4     7  2  4  8     0  7
3          9  3  4  6     1  5  6  2     1  8
4          3  5  0  2     6  2  4  4     6  3

Затем можно выбрать каждыйуровень xs:

print (df.xs('abc_2', axis=1))
   4  5  6  7
0  3  9  6  1
1  3  4  0  0
2  7  2  4  8
3  1  5  6  2
4  6  2  4  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...