Pandas dataframe, дублирующиеся значения строк для каждого шага - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу дублировать строки в кадре данных Pandas.Каждая строка должна повторяться n раз, где n - количество столбцов от шага 1 до шага N.Что у меня есть:

import pandas as pd        
pd.DataFrame(data={
      'id': ['A', 'B', 'C'],
      'n' : [  1,   2,   3],
      'step1' : [ '10rs',  '13rs',   '8rs'],
      'step2' : [ '100rs',  '130rs',   '8rs'],
      'step3' : [ '1000rs',  '1rs',   '8rs'],
      'step4' : [ '1rs',  '3rs',   '8rs']
    })

    id  n   step1   step2   step3   step4
0   A   1   10rs    100rs   1000rs  1rs
1   B   2   13rs    130rs   1rs     3rs
2   C   3   8rs      8rs    8rs     8rs

что я хочу получить взамен:

pd.DataFrame(data={
  'id': ['A', 'A', 'A', 'A', 'B', 'B','B','B','C','C','C','C'],
  'n' : [1  ,  1   , 1  , 1,  2  ,  2 , 2  ,2 , 3,3 ,3, 3  ],
  'step' : [ 10,  13,  13,   1,   13, 130 , 1, 1, 8 ,8 ,8 ,8 ]})

    id  n   step
0   A   1   10
1   A   1   13
2   A   1   13
3   A   1   1
4   B   2   13
5   B   2   130
6   B   2   1
7   B   2   1
8   C   3   8
9   C   3   8
10  C   3   8
11  C   3   8

Я пытался pd.pivot, но слишком много шагов для достижения финальной стадии. Возможно ли это?

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете попробовать переименовать все имена столбцов шага как уникальные и stack фрейм данных

what_i_have.rename(columns=lambda x: 'step' if 'step' in x else x,inplace=True)
what_i_have.set_index(['id','n']).stack().reset_index()

Out:

    id      n   level_2  0
0   user1   1   step    10rs
1   user1   1   step    100rs
2   user1   1   step    1000rs
3   user1   1   step    1rs
4   user2   2   step    13rs
5   user2   2   step    130rs
6   user2   2   step    1rs
7   user2   2   step    3
8   user3   3   step    8rs
9   user3   3   step    8rs
10  user3   3   step    8rs
11  user3   3   step    8rs
...