переупорядочение строк в столбцы в кадре данных pandas - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь найти несколько элегантных способов перестановки кадра данных для панд.

Мой исходный фрейм данных выглядит так:

    PS  PSS 10PS 10PSS  5PS 5PSS
1   6   263 5    23     2   101
2   5   49  2    30     1   30

желаемое расположение будет:

  1-PS  1-PSS 1-10PS 1-10PSS  1-5PS 1-5PSS 2-PS  2-PSS 2-10PS 2-10PSS 2-5PS 2-5PSS 
A 6     263   5      23       2      101   5     49     2     30      1     30  

Где A - новый индекс, и я хотел бы, чтобы строки были объединены со столбцами.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Вам нужно stack здесь, с объединением столбцов

s=df.stack().to_frame('A')
s.index=s.index.map('{0[0]}-{0[1]}'.format) 
s.T
Out[42]: 
   1-PS  1-PSS  1-10PS  1-10PSS  1-5PS  1-5PSS  2-PS  2-PSS  2-10PS  2-10PSS  \
A     6    263       5       23      2     101     5     49       2       30   
   2-5PS  2-5PSS  
A      1      30  
0 голосов
/ 11 мая 2018

Надеюсь, эти строки помогут вам:

# Put a pandas Series from each line in a generator
series = (pd.Series(i, index=['{}-{}'.format(ind,x) for x in df.columns]) 
          for ind, i in zip(df.index,df.values))

# Concatenate and convert to frame + transpose
df = pd.concat(series).to_frame('A').T

Полный пример:

import pandas as pd

data = '''\
index    PS  PSS 10PS 10PSS  5PS 5PSS
1   6   263 5    23     2   101
2   5   49  2    30     1   30'''

df = pd.read_csv(pd.compat.StringIO(data), sep='\s+').set_index('index')

# Put a pandas Series from each line in a generator
series = (pd.Series(i, index=['{}-{}'.format(ind,x) for x in df.columns]) 
          for ind, i in zip(df.index,df.values))

# Concatenate and convert to frame + transpose
df = pd.concat(series).to_frame('A').T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...