Преобразование столбцов в строки по группам - PullRequest
1 голос
/ 24 января 2020

У меня есть такой фрейм данных

Chennai
6200SqFT
10,000 Population
Mumbai
5000sqFT
17,000 Population

Я хочу преобразовать вот так

Chennai    6200SqFT    10,000 Population
Mumbai     5000SqFT    17,000 Population

Ответы [ 4 ]

2 голосов
/ 24 января 2020

IIU C, вы можете использовать следующий подход:

Предполагая, что ваш фрейм данных выглядит следующим образом:

print(df)
                   0
0            Chennai
1           6200SqFT
2  10,000 Population
3             Mumbai
4           5000sqFT
5  17,000 Population

Решение с np.reshape

output  = pd.DataFrame(df[0].to_numpy().reshape(-1,3))
#or output  = pd.DataFrame(df[0].values.reshape(-1,3))

Вывод:

         0         1                  2
0  Chennai  6200SqFT  10,000 Population
1   Mumbai  5000sqFT  17,000 Population

Если у вас неровные линии (не кратные 3, попробуйте):

output = pd.concat([g.reset_index(drop=True) 
         for _,g in df.groupby(df.index//3)],axis=1).T.reset_index(drop=True)
0 голосов
/ 24 января 2020

output = pd.concat ([g.reset_index (drop = True) для _, g в df.groupby (df.index // 3)], axis = 1) .T.reset_index (drop = True)

Автор: anky_91

0 голосов
/ 24 января 2020

попробуйте это, как кто-то упоминал, используя нарезку в комментарии ранее

>>> a,b,c = df[::3].values.reshape(-1), df[1::3].values.reshape(-1), df[2::3].values.reshape(-1)

>>> pd.DataFrame({'a':a,'b':b,'c':c}, index=range(len(a)))
         a         b                  c
0  Chennai  6200SqFT  10,000 Population
1   Mumbai  5000sqFT  17,000 Population
0 голосов
/ 24 января 2020

Попробуйте код ниже,

df_new = pd.DataFrame(df.values.reshape(-1,3), columns=['town', 'area', 'population'])
df_new.show()

Выход

    town     area           population
0   Chennai 6200SqFT    10,000 Population
1   Mumbai  5000sqFT    17,000 Population
...