arkadiy
arkadiy

Reputation: 766

Copying row values in pandas based on another row value

I have the following DF:

df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011', 
                                        '11/11/2011', '11/12/2011', '','','','',''], 
                'Event' : ['Dance', 'Painting', 'Bowling', 'Rugby', 'Running','Dance', 'Painting', 'Bowling', 'Rugby', 'Running']})

df

I want to copy the value of "Date" that corresponds to the row of the specific "Event" value (from a non-blank to a blank location), if the "Event" values match. So, if 'Dance' is associated with the value '11/8/2011', I want all "Dance" to have those values under date, and not be blank.

I want the final DF to look like this:

    df = pd.DataFrame({'Date' : ['11/8/2011', '11/9/2011', '11/10/2011', 
                                        '11/11/2011', '11/12/2011', '11/8/2011', '11/9/2011', '11/10/2011','11/11/2011', '11/12/2011'], 
                'Event' : ['Dance', 'Painting', 'Bowling', 'Rugby', 'Running','Dance', 'Painting', 'Bowling', 'Rugby', 'Running']})

I tried:

DF_New = df.groupby(['Event'])

But get the following message, instead of a new dataframe:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fe560cc17d0>

Upvotes: 1

Views: 47

Answers (1)

Quang Hoang
Quang Hoang

Reputation: 150735

You can do groupby().ffill():

df['Date'] = (df.Date.where(df.Date.ne(''))
   .groupby(df.Event)
   .ffill()
)

Output:

         Date     Event
0   11/8/2011     Dance
1   11/9/2011  Painting
2  11/10/2011   Bowling
3  11/11/2011     Rugby
4  11/12/2011   Running
5   11/8/2011     Dance
6   11/9/2011  Painting
7  11/10/2011   Bowling
8  11/11/2011     Rugby
9  11/12/2011   Running

Upvotes: 2

Related Questions