How to add 24 rows under each row in Python Pandas dataframe

Viewed 504

Original dataframe:

a1 a2 a3 a4 a5 a6
b1 b2 b3 b4 b5 b6

New dataframe:

a1 a2 a3 a4 a5 a6
(1st empty row)
(2nd empty row)
...
(24th empty row)
b1 b2 b3 b4 b5 b6
(1st empty row)
(2nd empty row)
...
(24th empty row)

The question is: How to perform the transformation above? Thanks a lot.

2 Answers

Use:

print (df)
    0   1   2   3   4   5
0  a1  a2  a3  a4  a5  a6
1  b1  b2  b3  b4  b5  b6

First multiple index values by number of repeated values and then use DataFrame.reindex with np.arange:

N = 5
df.index = df.index * (N + 1)
df = df.reindex(np.arange(df.index.max() + N + 1))
print (df)
      0    1    2    3    4    5
0    a1   a2   a3   a4   a5   a6
1   NaN  NaN  NaN  NaN  NaN  NaN
2   NaN  NaN  NaN  NaN  NaN  NaN
3   NaN  NaN  NaN  NaN  NaN  NaN
4   NaN  NaN  NaN  NaN  NaN  NaN
5   NaN  NaN  NaN  NaN  NaN  NaN
6    b1   b2   b3   b4   b5   b6
7   NaN  NaN  NaN  NaN  NaN  NaN
8   NaN  NaN  NaN  NaN  NaN  NaN
9   NaN  NaN  NaN  NaN  NaN  NaN
10  NaN  NaN  NaN  NaN  NaN  NaN
11  NaN  NaN  NaN  NaN  NaN  NaN

EDIT:

print (df)
    0  1   2   3   4  5
0  a1  2  a3  a4  a5  6
1  b1  2  b3  b4  b5  6

N = 5
df.index = df.index * (N + 1)
df = df.reindex(np.arange(df.index.max() + N + 1))
print (df)
      0    1    2    3    4    5
0    a1  2.0   a3   a4   a5  6.0
1   NaN  NaN  NaN  NaN  NaN  NaN
2   NaN  NaN  NaN  NaN  NaN  NaN
3   NaN  NaN  NaN  NaN  NaN  NaN
4   NaN  NaN  NaN  NaN  NaN  NaN
5   NaN  NaN  NaN  NaN  NaN  NaN
6    b1  2.0   b3   b4   b5  6.0
7   NaN  NaN  NaN  NaN  NaN  NaN
8   NaN  NaN  NaN  NaN  NaN  NaN
9   NaN  NaN  NaN  NaN  NaN  NaN
10  NaN  NaN  NaN  NaN  NaN  NaN
11  NaN  NaN  NaN  NaN  NaN  NaN

def convert_int_with_NaNs(x):
    try:
        return x.astype('Int64')
    except Exception:
        return x

df = df.apply(convert_int_with_NaNs)
print (df)
      0    1    2    3    4    5
0    a1    2   a3   a4   a5    6
1   NaN  NaN  NaN  NaN  NaN  NaN
2   NaN  NaN  NaN  NaN  NaN  NaN
3   NaN  NaN  NaN  NaN  NaN  NaN
4   NaN  NaN  NaN  NaN  NaN  NaN
5   NaN  NaN  NaN  NaN  NaN  NaN
6    b1    2   b3   b4   b5    6
7   NaN  NaN  NaN  NaN  NaN  NaN
8   NaN  NaN  NaN  NaN  NaN  NaN
9   NaN  NaN  NaN  NaN  NaN  NaN
10  NaN  NaN  NaN  NaN  NaN  NaN
11  NaN  NaN  NaN  NaN  NaN  NaN

In order to add an empty row you can use the following insctruction :

your_dataframe = your_dataframe.append({} , ignore_index=True)

To perform the requested transformation, as i don't know how your data is shaped, nor how it is indexed, i suggest you create a new empty dataframe.

For each of your initial dataframe entries, you should insert it to your new one, and append 24 time an empty row as i described.

Here is an example on how to perform it :

## Use your own data instead
data = [['a1', 'a2', 'a3', 'a4', 'a5', 'a6'],['b1', 'b2', 'b3', 'b4', 'b5', 'b6']]
### Load the data in the dataframe
df = pd.DataFrame(data)

## Create the empty dataframe
df2 = pd.DataFrame()

## Use the initial dataframe length to perform the row iteration
length = len(df.index)

## For each rows of the initial dataframe
for i in range(0, length):
    ## Append the current row to the new dataframe
    df2 = df2.append(df[i:i+1],ignore_index=True) 
    ## Adding 24 empty rows
    for j in range(0,25):
        df2 = df2.append({},ignore_index=True)

So if your initial dataframe is something like :

    0   1   2   3   4   5
0  a1  a2  a3  a4  a5  a6
1  b1  b2  b3  b4  b5  b6

Once you have executed the script it outputs :

      0    1    2    3    4    5
0    a1   a2   a3   a4   a5   a6
1   NaN  NaN  NaN  NaN  NaN  NaN
2   NaN  NaN  NaN  NaN  NaN  NaN
3   NaN  NaN  NaN  NaN  NaN  NaN
...
25  NaN  NaN  NaN  NaN  NaN  NaN
26   b1   b2   b3   b4   b5   b6
27  NaN  NaN  NaN  NaN  NaN  NaN
...
49  NaN  NaN  NaN  NaN  NaN  NaN
50  NaN  NaN  NaN  NaN  NaN  NaN
51  NaN  NaN  NaN  NaN  NaN  NaN

Related