Replicate/Duplicate row by index row Pandas/Numpy

Viewed 126

I'm trying to replicate/duplicate several rows in a dataframe by its index but I'm not making any close result to do so.

Given this DataFrame:

DataFrame Sample

The code i have:

def duplicateDealers(self, data):
    pd.options.display.width = 0
    counter = 0
    for index, row in data.iterrows():
        brandColumn = 'Brand' + str(counter)
        # print(index, row[brandColumn])
        if str(row[brandColumn]) == 'Cadillac':
            newData = pd.DataFrame(np.repeat(data.loc[int(index)], 1))
            newData['Repeated'] = 'Yes'
    print(newData.columns)
    print(type(pd.DataFrame(np.repeat(data.loc[int(index)], 1))))
    print(newData)

If I use the following code:

newData = pd.DataFrame(np.repeat(data.loc[int(index)], 1, axis=0))

I get this error:

ValueError: the 'axis' parameter is not supported in the pandas implementation of repeat()

What do I want to achieve with this code?

I iterate over rows and columns to identify the word "Cadillac" in the column "Brand0", if the condition is True then I want to duplicate the entire row by its index and maintain the original format of the row, then I will manipulate the new row data as I wish.

The output is the following (The column name "4108" is a random index, the DataFrame has a huge amount of records, over 5k):

Actual Output

And the output i want would be:

Desired Output

What am i doing wrong?

Regards and thank you.

EDIT:

Here's some sample data:


Source_ID | SecondaryName                      | PrimaryName                        | Address                | City        | State | Full_Postal_Code | Postal_Code | Country | Telephone  | Brand0
123456    | JACK SCHMITT CADILLAC, INC.        | JACK SCHMITT CADILLAC, INC.        | 915 W HWY 50           | O FALLON    | IL    | 62269            | 62269       | USA     | 6186321001 | Cadillac
987654    | JAMES E. BLACK CADILLAC            | JAMES E. BLACK CADILLAC            | 3929 ADMIRAL PEARY HWY | EBENSBURG   | PA    | 15931            | 15931       | USA     | 8144729553 | Cadillac
753951    | COLE-VALLEY MOTOR COMPANY          | COLE-VALLEY MOTOR COMPANY          | 4111 ELM ROAD NE       | WARREN      | OH    | 44483            | 44483       | USA     | 3303721668 | Cadillac
159357    | MCDONALD GMC-CADILLAC, INC.        | MCDONALD GMC-CADILLAC, INC.        | 5155 STATE ST          | SAGINAW     | MI    | 48603            | 48603       | USA     | 9897905154 | Cadillac
456987    | DAVID BRUCE AUTO CENTER, INC.      | DAVID BRUCE AUTO CENTER, INC.      | 555 LATHAM DR          | BOURBONNAIS | IL    | 60914            | 60914       | USA     | 8159337709 | Cadillac
321456    | JACK WOLF CADILLAC-GMC TRUCK, INC. | JACK WOLF CADILLAC-GMC TRUCK, INC. | 1855 N STATE ST        | BELVIDERE   | IL    | 61008            | 61008       | USA     | 8155443403 | Cadillac

EDIT 2:

Here more details about the goal I try to achieve:

Each row may have several BrandX columns, and according to its content, i will duplicate the row and add to the Source_ID the brand name and other stuff, so i can have the right amount of records according to the Dealer Brands.

DataFrame:

Source_ID | SecondaryName                      | PrimaryName                        | Address                | City        | State | Full_Postal_Code | Postal_Code | Country | Telephone  | Brand0   | Brand1    | Brand2
123456    | JACK SCHMITT CADILLAC, INC.        | JACK SCHMITT CADILLAC, INC.        | 915 W HWY 50           | O FALLON    | IL    | 62269            | 62269       | USA     | 6186321001 | Cadillac | GMC       | Buick
987654    | JAMES E. BLACK CADILLAC            | JAMES E. BLACK CADILLAC            | 3929 ADMIRAL PEARY HWY | EBENSBURG   | PA    | 15931            | 15931       | USA     | 8144729553 | Cadillac | NaN       | GMC
753951    | COLE-VALLEY MOTOR COMPANY          | COLE-VALLEY MOTOR COMPANY          | 4111 ELM ROAD NE       | WARREN      | OH    | 44483            | 44483       | USA     | 3303721668 | Cadillac | Buick     | NaN
159357    | MCDONALD GMC-CADILLAC, INC.        | MCDONALD GMC-CADILLAC, INC.        | 5155 STATE ST          | SAGINAW     | MI    | 48603            | 48603       | USA     | 9897905154 | Cadillac | Buick     | NaN
456987    | DAVID BRUCE AUTO CENTER, INC.      | DAVID BRUCE AUTO CENTER, INC.      | 555 LATHAM DR          | BOURBONNAIS | IL    | 60914            | 60914       | USA     | 8159337709 | Cadillac | Chevrolet | GMC
321456    | JACK WOLF CADILLAC-GMC TRUCK, INC. | JACK WOLF CADILLAC-GMC TRUCK, INC. | 1855 N STATE ST        | BELVIDERE   | IL    | 61008            | 61008       | USA     | 8155443403 | Cadillac | NaN       | NaN

Expected Output:

Source_ID        | SecondaryName                      | PrimaryName                        | Address                | City        | State | Full_Postal_Code | Postal_Code | Country | Telephone  | Brand0   | Brand1    | Brand2
123456_Cadillac  | JACK SCHMITT CADILLAC, INC.        | JACK SCHMITT CADILLAC, INC.        | 915 W HWY 50           | O FALLON    | IL    | 62269            | 62269       | USA     | 6186321001 | Cadillac | GMC       | Buick
123456_GMC       | JACK SCHMITT CADILLAC, INC.        | JACK SCHMITT CADILLAC, INC.        | 915 W HWY 50           | O FALLON    | IL    | 62269            | 62269       | USA     | 6186321001 | Cadillac | GMC       | Buick
123456_Buick     | JACK SCHMITT CADILLAC, INC.        | JACK SCHMITT CADILLAC, INC.        | 915 W HWY 50           | O FALLON    | IL    | 62269            | 62269       | USA     | 6186321001 | Cadillac | GMC       | Buick
987654_Cadillac  | JAMES E. BLACK CADILLAC            | JAMES E. BLACK CADILLAC            | 3929 ADMIRAL PEARY HWY | EBENSBURG   | PA    | 15931            | 15931       | USA     | 8144729553 | Cadillac | NaN       | GMC
987654_GMC       | JAMES E. BLACK CADILLAC            | JAMES E. BLACK CADILLAC            | 3929 ADMIRAL PEARY HWY | EBENSBURG   | PA    | 15931            | 15931       | USA     | 8144729553 | Cadillac | NaN       | GMC
753951_Cadillac  | COLE-VALLEY MOTOR COMPANY          | COLE-VALLEY MOTOR COMPANY          | 4111 ELM ROAD NE       | WARREN      | OH    | 44483            | 44483       | USA     | 3303721668 | Cadillac | Buick     | NaN
753951_GMC       | COLE-VALLEY MOTOR COMPANY          | COLE-VALLEY MOTOR COMPANY          | 4111 ELM ROAD NE       | WARREN      | OH    | 44483            | 44483       | USA     | 3303721668 | Cadillac | Buick     | NaN
159357_Cadillac  | MCDONALD GMC-CADILLAC, INC.        | MCDONALD GMC-CADILLAC, INC.        | 5155 STATE ST          | SAGINAW     | MI    | 48603            | 48603       | USA     | 9897905154 | Cadillac | Buick     | NaN
159357_Buick     | MCDONALD GMC-CADILLAC, INC.        | MCDONALD GMC-CADILLAC, INC.        | 5155 STATE ST          | SAGINAW     | MI    | 48603            | 48603       | USA     | 9897905154 | Cadillac | Buick     | NaN
456987_Cadillac  | DAVID BRUCE AUTO CENTER, INC.      | DAVID BRUCE AUTO CENTER, INC.      | 555 LATHAM DR          | BOURBONNAIS | IL    | 60914            | 60914       | USA     | 8159337709 | Cadillac | Chevrolet | GMC
456987_Chevrolet | DAVID BRUCE AUTO CENTER, INC.      | DAVID BRUCE AUTO CENTER, INC.      | 555 LATHAM DR          | BOURBONNAIS | IL    | 60914            | 60914       | USA     | 8159337709 | Cadillac | Chevrolet | GMC
456987_GMC       | DAVID BRUCE AUTO CENTER, INC.      | DAVID BRUCE AUTO CENTER, INC.      | 555 LATHAM DR          | BOURBONNAIS | IL    | 60914            | 60914       | USA     | 8159337709 | Cadillac | Chevrolet | GMC
321456_Cadillac  | JACK WOLF CADILLAC-GMC TRUCK, INC. | JACK WOLF CADILLAC-GMC TRUCK, INC. | 1855 N STATE ST        | BELVIDERE   | IL    | 61008            | 61008       | USA     | 8155443403 | Cadillac | NaN       | NaN
1 Answers

The following can do this.

Modules

import numpy as np
import pandas as pd

Example data

df = pd.DataFrame({'Source':[111347,115742,100007], 'Brand0':['Cadillac', 'Cadillac', 'Alternative']})

Solution using np.repeat.

df.loc[np.repeat(df.index.values, list(df['Brand0'].isin(['Cadillac'])+1))]
Related