trinity
trinity

Reputation: 69

Pandas Dataframe merging columns

I have a pandas dataframe like the following

Year  Month  Day Securtiy Trade  Value  NewDate
2011      1   10     AAPL   Buy   1500        0

My question is, how can I merge the columns Year, Month, Day into column NewDate so that the newDate column looks like the following

2011-1-10

Upvotes: 1

Views: 907

Answers (3)

Alexander
Alexander

Reputation: 109510

You can create a new Timestamp as follows:

df['newDate'] = df.apply(lambda x: pd.Timestamp('{0}-{1}-{2}'
                                                .format(x.Year, x.Month, x.Day),
                                   axix=1)

>>> df
   Year  Month  Day Securtiy Trade  Value  NewDate    newDate
0  2011      1   10     AAPL   Buy   1500        0 2011-01-10

Upvotes: 0

Raviteja Chirala
Raviteja Chirala

Reputation: 49

df['Year'] + '-' + df['Month'] + '-' + df['Date']

Upvotes: 1

Andy Hayden
Andy Hayden

Reputation: 375377

The best way is to parse it when reading as csv:

In [1]: df = pd.read_csv('foo.csv', sep='\s+', parse_dates=[['Year', 'Month', 'Day']])

In [2]: df
Out[2]:
       Year_Month_Day Securtiy Trade  Value  NewDate
0 2011-01-10 00:00:00     AAPL   Buy   1500        0

You can do this without the header, by defining column names while reading:

pd.read_csv(input_file, header=['Year', 'Month', 'Day', 'Security','Trade', 'Value' ], parse_dates=[['Year', 'Month', 'Day']])

If it's already in your DataFrame, you could use an apply:

In [11]: df['Date'] = df.apply(lambda s: pd.Timestamp('%s-%s-%s' % (s['Year'], s['Month'], s['Day'])), 1)

In [12]: df
Out[12]:
   Year  Month  Day Securtiy Trade  Value  NewDate                Date
0  2011      1   10     AAPL   Buy   1500        0 2011-01-10 00:00:00

Upvotes: 1

Related Questions