Skip to content
Advertisement

Manipulating DataFrame

I have the following dataframe df where there are 3 columns: Date, value and topic. I want to create a new dataframe df1 where the topic is the column and is indexed by day, and each topic has its own value per day. My problem is that I don’t know how to match the value to the topic per day. Any help would be appreciated.

import numpy as np 
import pandas as pd 
import random

rng = pd.date_range('2015-02-24', periods=50, freq='H')
TOPIC=np.random.choice(5, len(rng), replace=True)

df = pd.DataFrame({ 'Date': rng, 'Val' : np.random.randn(len(rng)),'Topic':TOPIC}) 
columns=df.Topic.unique()
df1=pd.DataFrame(columns=columns)
df1['Date']=df['Date']
df1.set_index('Date',inplace=True)
df1=df1.resample('D').ffill()
df1

Advertisement

Answer

df1 = (df.assign().pivot_table(index='Date', columns='Topic',
                              values='Val'))

Output

Topic                       0         1         2         3         4
Date                                                                 
2015-02-24 00:00:00       NaN       NaN       NaN -1.311060       NaN
2015-02-24 01:00:00  0.194373       NaN       NaN       NaN       NaN
2015-02-24 02:00:00       NaN       NaN  0.182364       NaN       NaN
2015-02-24 03:00:00       NaN       NaN       NaN -1.498907       NaN
2015-02-24 04:00:00  0.220041       NaN       NaN       NaN       NaN
2015-02-24 05:00:00       NaN -0.183823       NaN       NaN       NaN
2015-02-24 06:00:00       NaN       NaN       NaN       NaN  0.662866
2015-02-24 07:00:00       NaN  0.846723       NaN       NaN       NaN
2015-02-24 08:00:00       NaN       NaN       NaN -1.238696       NaN
2015-02-24 09:00:00       NaN       NaN       NaN -2.520253       NaN
2015-02-24 10:00:00       NaN       NaN       NaN       NaN  1.056829
2015-02-24 11:00:00       NaN       NaN       NaN -0.749357       NaN
2015-02-24 12:00:00       NaN  0.038661       NaN       NaN       NaN
2015-02-24 13:00:00       NaN  0.304193       NaN       NaN       NaN
2015-02-24 14:00:00       NaN       NaN       NaN -1.217962       NaN
2015-02-24 15:00:00       NaN  2.073715       NaN       NaN       NaN
2015-02-24 16:00:00       NaN       NaN       NaN -0.320530       NaN
2015-02-24 17:00:00 -1.309147       NaN       NaN       NaN       NaN
2015-02-24 18:00:00       NaN       NaN       NaN       NaN -0.240466
2015-02-24 19:00:00       NaN       NaN       NaN  0.043733       NaN
2015-02-24 20:00:00       NaN       NaN       NaN       NaN  1.395441
2015-02-24 21:00:00       NaN       NaN  0.625773       NaN       NaN
2015-02-24 22:00:00       NaN       NaN       NaN       NaN  0.291916
2015-02-24 23:00:00       NaN       NaN       NaN  0.090431       NaN
2015-02-25 00:00:00       NaN       NaN -0.509572       NaN       NaN
2015-02-25 01:00:00       NaN       NaN -0.309990       NaN       NaN
2015-02-25 02:00:00       NaN       NaN  0.711705       NaN       NaN
2015-02-25 03:00:00       NaN  0.296445       NaN       NaN       NaN
2015-02-25 04:00:00       NaN       NaN       NaN  0.222146       NaN
2015-02-25 05:00:00       NaN       NaN       NaN       NaN  1.030145
2015-02-25 06:00:00  1.064250       NaN       NaN       NaN       NaN
2015-02-25 07:00:00       NaN       NaN  0.023348       NaN       NaN
2015-02-25 08:00:00       NaN       NaN       NaN       NaN -0.576451
2015-02-25 09:00:00       NaN       NaN  1.573513       NaN       NaN
2015-02-25 10:00:00       NaN       NaN  0.960823       NaN       NaN
2015-02-25 11:00:00       NaN       NaN  0.349976       NaN       NaN
2015-02-25 12:00:00       NaN       NaN       NaN -0.885772       NaN
2015-02-25 13:00:00       NaN  1.050893       NaN       NaN       NaN
2015-02-25 14:00:00       NaN       NaN -1.634622       NaN       NaN
2015-02-25 15:00:00       NaN       NaN       NaN       NaN  0.003866
2015-02-25 16:00:00  0.952088       NaN       NaN       NaN       NaN
2015-02-25 17:00:00       NaN       NaN  0.518994       NaN       NaN
2015-02-25 18:00:00 -0.770279       NaN       NaN       NaN       NaN
2015-02-25 19:00:00       NaN       NaN -0.510245       NaN       NaN
2015-02-25 20:00:00 -0.024560       NaN       NaN       NaN       NaN
2015-02-25 21:00:00       NaN       NaN -0.823536       NaN       NaN
2015-02-25 22:00:00       NaN       NaN       NaN       NaN -0.498414
2015-02-25 23:00:00       NaN  0.497084       NaN       NaN       NaN
2015-02-26 00:00:00       NaN  0.799647       NaN       NaN       NaN
2015-02-26 01:00:00       NaN       NaN       NaN -2.291271       NaN
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement