Как вывести четыре столбца данных Excel в виде двух строк в pandas

#python #python-3.x #excel #pandas #dataframe

#python #python-3.x #excel #pandas #фрейм данных

Вопрос:

У меня есть данные в четырех столбцах в Excel, которые нужно перенести в две строки. Первый столбец будет строкой заголовка для данных во втором столбце, а третий столбец будет заголовком для данных в четвертом столбце, как показано ниже:

Данные, как показано ниже

 A    1      G   7
B    2      H   8
C    3      I   9
D    4      J   10
E    5      K   11
F    6      L   12
  

И нужно транспонировать

 A  B  C D  E  F  G  H  I  J  K  L
1  2  3 4  5  6  7  8  9  10 11 12 
  

Ценю ваш ценный вклад.

Ответ №1:

Используйте pd.concat и transpose(.T) :

 In [2139]: d = pd.concat([df.iloc[:, :2].T.reset_index(drop=True), df.iloc[:, 2:].T.reset_index(drop=True)],1)

In [2144]: d.columns = d.loc[0]

In [2147]: d = d.drop(0)

In [2148]: d
Out[2148]: 
0  A  B  C  D  E  F  G  H  I   J   K   L
1  1  2  3  4  5  6  7  8  9  10  11  12
  

Комментарии:

1. Спасибо @Mayank Porwal

Ответ №2:

Для общего решения, работающего с 4 , 6 , 10 столбцы выбирают пары и разбивают столбцы на пары путем индексации, сглаживают в массиве numpy и передают в DataFrame конструктор:

 c = df.iloc[:, ::2].T.to_numpy().ravel()
v = df.iloc[:, 1::2].T.to_numpy().ravel()

df = pd.DataFrame([v], columns=c)
print (df)
   A  B  C  D  E  F  G  H  I   J   K   L
0  1  2  3  4  5  6  7  8  9  10  11  12
  

Или, если вы хотите использовать решение pandas, создайте MultiIndex его путем деления по модулю и целому np.arange числу на длину столбцов, а затем измените на DataFrame.stack , затем транспонируйте и очистите некоторые данные:

 a = np.arange(len(df.columns))

df.columns = [a % 2, a // 2]
df = (df.stack()
        .sort_index(level=1)
        .set_index(0)[[1]]
        .T
        .rename_axis(None, axis=1)
        .reset_index(drop=True))
print (df)
   A  B  C  D  E  F  G  H  I   J   K   L
0  1  2  3  4  5  6  7  8  9  10  11  12
  

Ответ №3:

Вы можете использовать np.reshape , np.vstack , а затем set_index и Transpose :

 >>> pd.DataFrame(np.vstack(np.split(df, 2, axis=1))).set_index(0).T

0  A  B  C  D  E  F  G  H  I   J   K   L
1  1  2  3  4  5  6  7  8  9  10  11  12
  

Комментарии:

1. Потрясающе. Это замечательно. Я попробовал все три решения. Я новичок в python и программировании в целом. Это был мой первый вопрос здесь, и я получил очень хороший ответ. Спасибо, @Sayandip Dutta

2. @ArifKassim добро пожаловать. В SO, если вы зададите достойный вопрос, вы почти всегда получите помощь. Если это сработает, вы можете рассмотреть возможность голосования.