pandas

reshape dataframe by append two more rows after each row


I would like to reshape dataframe by insert two rows after each row. the rule is:

  1. The first column use current row value.
  2. The second row always use a fixed value, say 0.
  3. The third row always use None.

Demo code:

import pandas as pd

data = [
    ['A',1],
    ['B',2],
    ['C',3],
    ['D',4]
    ]

df = pd.DataFrame(data,columns=['name','value'])
print(df)

output:

  name  value
0    A      1
1    B      2
2    C      3
3    D      4

Expected output:

  name  value
0    A      1
1    A      0
2    A      None
3    B      2
4    B      0
5    B      None
6    C      3
7    C      0
8    C      None
9    D      4
10   D      0
11   D      None


Solution

  • Another possible solution, which first maps each value of value column to a list of the wanted values and then explodes the dataframe by the value column:

    df.assign(value = df['value'].map(lambda x: [x, 0, None])).explode('value')
    

    Output:

      name value
    0    A     1
    0    A     0
    0    A  None
    1    B     2
    1    B     0
    1    B  None
    2    C     3
    2    C     0
    2    C  None
    3    D     4
    3    D     0
    3    D  None