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