cumin
cumin

Reputation: 491

Repeating rows in a pandas dataframe

I have a dataframe that I would like to 'double' (or triple, or....). I am not trying to concatenate a dataframe with itself, i.e. have one full copy of the df stacked on top of another full copy of the df.

Starting with this:

import pandas as pd
from io import StringIO
from IPython.display import display

A_csv = """country
Afghanistan
Brazil
China"""
with StringIO(A_csv) as fp:
    A = pd.read_csv(fp)
display(A)

result

       country
0  Afghanistan
1       Brazil
2        China

I want to get something like this; the index and indentation aren't so important.

     country
0  Afghanistan
1  Afghanistan
2  Brazil
3  Brazil
4  China
5  China

Upvotes: 2

Views: 5554

Answers (3)

cs95
cs95

Reputation: 402313

Use np.repeat:

df = pd.DataFrame(A.values.repeat(2), columns=A.columns)
df

       country
0  Afghanistan
1  Afghanistan
2       Brazil
3       Brazil
4        China
5        China

For N-D dataframes, the solution should be extended using an axis parameter in repeat:

df = pd.DataFrame(A.values.repeat(2, axis=0), columns=A.columns)

Upvotes: 3

BENY
BENY

Reputation: 323226

By using pd.concat

pd.concat([df]*2,axis=0).sort_index().reset_index(drop=True)
Out[56]: 
       country
0  Afghanistan
1  Afghanistan
2       Brazil
3       Brazil
4        China
5        China

Upvotes: 0

Vaishali
Vaishali

Reputation: 38415

You can use np.repeat

pd.DataFrame(np.repeat(df['country'], 2)).reset_index(drop = True)

    country
0   Afghanistan
1   Afghanistan
2   Brazil
3   Brazil
4   China
5   China

Upvotes: 0

Related Questions