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.
JavaScript
x
15
15
1
import numpy as np
2
import pandas as pd
3
import random
4
5
rng = pd.date_range('2015-02-24', periods=50, freq='H')
6
TOPIC=np.random.choice(5, len(rng), replace=True)
7
8
df = pd.DataFrame({ 'Date': rng, 'Val' : np.random.randn(len(rng)),'Topic':TOPIC})
9
columns=df.Topic.unique()
10
df1=pd.DataFrame(columns=columns)
11
df1['Date']=df['Date']
12
df1.set_index('Date',inplace=True)
13
df1=df1.resample('D').ffill()
14
df1
15
Advertisement
Answer
JavaScript
1
3
1
df1 = (df.assign().pivot_table(index='Date', columns='Topic',
2
values='Val'))
3
Output
JavaScript
1
53
53
1
Topic 0 1 2 3 4
2
Date
3
2015-02-24 00:00:00 NaN NaN NaN -1.311060 NaN
4
2015-02-24 01:00:00 0.194373 NaN NaN NaN NaN
5
2015-02-24 02:00:00 NaN NaN 0.182364 NaN NaN
6
2015-02-24 03:00:00 NaN NaN NaN -1.498907 NaN
7
2015-02-24 04:00:00 0.220041 NaN NaN NaN NaN
8
2015-02-24 05:00:00 NaN -0.183823 NaN NaN NaN
9
2015-02-24 06:00:00 NaN NaN NaN NaN 0.662866
10
2015-02-24 07:00:00 NaN 0.846723 NaN NaN NaN
11
2015-02-24 08:00:00 NaN NaN NaN -1.238696 NaN
12
2015-02-24 09:00:00 NaN NaN NaN -2.520253 NaN
13
2015-02-24 10:00:00 NaN NaN NaN NaN 1.056829
14
2015-02-24 11:00:00 NaN NaN NaN -0.749357 NaN
15
2015-02-24 12:00:00 NaN 0.038661 NaN NaN NaN
16
2015-02-24 13:00:00 NaN 0.304193 NaN NaN NaN
17
2015-02-24 14:00:00 NaN NaN NaN -1.217962 NaN
18
2015-02-24 15:00:00 NaN 2.073715 NaN NaN NaN
19
2015-02-24 16:00:00 NaN NaN NaN -0.320530 NaN
20
2015-02-24 17:00:00 -1.309147 NaN NaN NaN NaN
21
2015-02-24 18:00:00 NaN NaN NaN NaN -0.240466
22
2015-02-24 19:00:00 NaN NaN NaN 0.043733 NaN
23
2015-02-24 20:00:00 NaN NaN NaN NaN 1.395441
24
2015-02-24 21:00:00 NaN NaN 0.625773 NaN NaN
25
2015-02-24 22:00:00 NaN NaN NaN NaN 0.291916
26
2015-02-24 23:00:00 NaN NaN NaN 0.090431 NaN
27
2015-02-25 00:00:00 NaN NaN -0.509572 NaN NaN
28
2015-02-25 01:00:00 NaN NaN -0.309990 NaN NaN
29
2015-02-25 02:00:00 NaN NaN 0.711705 NaN NaN
30
2015-02-25 03:00:00 NaN 0.296445 NaN NaN NaN
31
2015-02-25 04:00:00 NaN NaN NaN 0.222146 NaN
32
2015-02-25 05:00:00 NaN NaN NaN NaN 1.030145
33
2015-02-25 06:00:00 1.064250 NaN NaN NaN NaN
34
2015-02-25 07:00:00 NaN NaN 0.023348 NaN NaN
35
2015-02-25 08:00:00 NaN NaN NaN NaN -0.576451
36
2015-02-25 09:00:00 NaN NaN 1.573513 NaN NaN
37
2015-02-25 10:00:00 NaN NaN 0.960823 NaN NaN
38
2015-02-25 11:00:00 NaN NaN 0.349976 NaN NaN
39
2015-02-25 12:00:00 NaN NaN NaN -0.885772 NaN
40
2015-02-25 13:00:00 NaN 1.050893 NaN NaN NaN
41
2015-02-25 14:00:00 NaN NaN -1.634622 NaN NaN
42
2015-02-25 15:00:00 NaN NaN NaN NaN 0.003866
43
2015-02-25 16:00:00 0.952088 NaN NaN NaN NaN
44
2015-02-25 17:00:00 NaN NaN 0.518994 NaN NaN
45
2015-02-25 18:00:00 -0.770279 NaN NaN NaN NaN
46
2015-02-25 19:00:00 NaN NaN -0.510245 NaN NaN
47
2015-02-25 20:00:00 -0.024560 NaN NaN NaN NaN
48
2015-02-25 21:00:00 NaN NaN -0.823536 NaN NaN
49
2015-02-25 22:00:00 NaN NaN NaN NaN -0.498414
50
2015-02-25 23:00:00 NaN 0.497084 NaN NaN NaN
51
2015-02-26 00:00:00 NaN 0.799647 NaN NaN NaN
52
2015-02-26 01:00:00 NaN NaN NaN -2.291271 NaN
53