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 appreciate it.
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
CodePudding user response:
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