Перестановка ячеек данных с одинаковым заголовком столбцов с помощью Pandas - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть этот df, который я читаю из файла excel с помощью pandas.read_excel ():

ID  A   B   C   A   B   C   A   B   C
10  a1  b1  c1  a4  b4  c4  a7  b7  c7
20  a2  b2  c2  a5  b5  c5  a8  b8  c8
30  a3  b3  c3  a6  b6  c6  a9  b9  c9

Как мне изменить его на df_1, например:

ID   A   B   C     
10   a1  b1  c1    
20   a2  b2  c2    
30   a3  b3  c3    
10   a4  b4  c4
20   a5  b5  c5
30   a6  b6  c6
10   a7  b7  c7
20   a8  b8  c8
30   a9  b9  c9

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вот еще один способ использования списка и pd.concat

df1 = df.set_index('ID')
n=3 #The number of times your column headers repeat
pd.concat([df1.iloc[:,i:i+n] for i in range(0,df1.shape[1],n)]).reset_index()

Вывод:

   ID   A   B   C
0  10  a1  b1  c1
1  20  a2  b2  c2
2  30  a3  b3  c3
3  10  a4  b4  c4
4  20  a5  b5  c5
5  30  a6  b6  c6
6  10  a7  b7  c7
7  20  a8  b8  c8
8  30  a9  b9  c9
0 голосов
/ 26 сентября 2018

Вы можете создать MultiIndex в столбцах для подсчета повторяющихся имен столбцов на cumcount, а затем возможно изменить их на stack, затем очистить некоторые данные на reset_index:

df = df.set_index('ID')
s = df.columns.to_series()
df.columns = [df.columns, s.groupby(s).cumcount()]

df = df.stack().sort_index(level=1).reset_index(level=1, drop=True).reset_index()
print (df)
   ID   A   B   C
0  10  a1  b1  c1
1  20  a2  b2  c2
2  30  a3  b3  c3
3  10  a4  b4  c4
4  20  a5  b5  c5
5  30  a6  b6  c6
6  10  a7  b7  c7
7  20  a8  b8  c8
8  30  a9  b9  c9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...