hello experts i was struck in appending value to new column of df by comparing other column values. i searched related questions but not found suitable answer. I'm newbie to python
I want to append new column of df at last row of each element by comparing last 4 values of df other column using df.apply lambda help in this regard highly appreciated.
I have following df:
Symbol open close sig
0 APPL 153.60 152.90 0
1 APPL 152.90 153.55 1
2 APPL 153.55 152.00 0
3 APPL 152.00 153.50 1
4 APPL 153.50 154.10 1
5 TSLA 193.00 192.10 0
6 TSLA 192.10 191.50 0
7 TSLA 191.50 192.90 1
8 TSLA 192.90 192.45 0
9 TSLA 192.45 191.10 0
i want to compare df['sig'] column except 1 row and so on for all stocks, if sig column last 4 values APPL is 1011 then df ['signal'] at row 4 it should be appended as 1 (i.e. last row of each stock) if last 4 values df['sig'] of TSLA is 0100 then at 9 row df['signal'] to be appended as 0
by using lambda or df.npwhere etc...
Thanks!
expected this:
Symbol open close sig signal
0 APPL 153.60 152.90 0 NaN
1 APPL 152.90 153.55 1 NaN
2 APPL 152.75 152.00 0 NaN
3 APPL 153.00 153.50 1 NaN
4 APPL 153.50 154.10 1 1
5 TSLA 193.00 192.10 0 NaN
6 TSLA 192.10 191.50 0 NaN
7 TSLA 191.50 192.90 1 NaN
8 TSLA 192.90 192.45 0 NaN
9 TSLA 192.45 191.10 0 0
You can use a groupby.rolling:
df['signal'] = (df.groupby('Symbol')['sig'].rolling(4)
.apply(lambda x: x.eq([1, 0, 1, 1]).all()).droplevel(0)
)
Output:
Symbol open close sig signal
0 APPL 153.60 152.90 0 NaN
1 APPL 152.90 153.55 1 NaN
2 APPL 152.75 152.00 0 NaN
3 APPL 153.00 153.50 1 0.0
4 APPL 153.50 154.10 1 1.0
5 TSLA 193.00 192.10 0 NaN
6 TSLA 192.10 191.50 0 NaN
7 TSLA 191.50 192.90 1 NaN
8 TSLA 192.90 192.45 0 0.0
9 TSLA 192.45 191.10 0 0.0
mapping custom values for each group:
mapper = {'APPL': ([1, 0, 1, 1], 1), 'TSLA': ([0, 1, 0, 0], 0)}
df['signal'] = (
df.groupby('Symbol')['sig']
.apply(lambda g: g.rolling(4)
.apply(lambda x: mapper[g.name][1]
if x.tolist() == mapper[g.name][0]
else float('nan')
)
)
)
Output:
Symbol open close sig signal
0 APPL 153.60 152.90 0 NaN
1 APPL 152.90 153.55 1 NaN
2 APPL 153.55 152.00 0 NaN
3 APPL 152.00 153.50 1 NaN
4 APPL 153.50 154.10 1 1.0
5 TSLA 193.00 192.10 0 NaN
6 TSLA 192.10 191.50 0 NaN
7 TSLA 191.50 192.90 1 NaN
8 TSLA 192.90 192.45 0 NaN
9 TSLA 192.45 191.10 0 0.0
Related
I have two dataframes
dt AAPL AMC AMZN ASO ATH ... SPCE SRNE TH TSLA VIAC WKHS
0 2021-04-12 36 28 6 20 1 ... 5 0 0 50 23 0
1 2021-04-13 46 15 5 16 6 ... 5 0 0 122 12 1
2 2021-04-14 12 4 1 5 2 ... 2 0 0 39 1 0
3 2021-04-15 30 23 3 14 2 ... 15 0 0 101 9 0
dt AAPL AMC AMZN ASO ATH ... SPCE SRNE TH TSLA VIAC WKHS
0 2021-04-12 41 28 4 33 10 ... 5 0 0 56 14 3
1 2021-04-13 76 22 7 12 29 ... 4 0 0 134 8 2
2 2021-04-14 21 15 2 7 16 ... 2 0 0 61 3 0
3 2021-04-15 54 43 9 2 31 ... 16 0 0 83 13 1
I want to remove numbers from two dataframe that are lower than 10 if the instance is deleted from one dataframe the same cell should be remove in another dataframe same thing goes other way around
Appreciate your help
Use a mask:
## pre-requisite
df1 = df1.set_index('dt')
df2 = df2.set_index('dt')
## processing
mask = df1.lt(10) | df2.lt(10)
df1 = df1.mask(mask)
df2 = df2.mask(mask)
output:
>>> df1
AAPL AMC AMZN ASO ATH SPCE SRNE TH TSLA VIAC WKHS
dt
2021-04-12 36 28.0 NaN 20.0 NaN NaN NaN NaN 50 23.0 NaN
2021-04-13 46 15.0 NaN 16.0 NaN NaN NaN NaN 122 NaN NaN
2021-04-14 12 NaN NaN NaN NaN NaN NaN NaN 39 NaN NaN
2021-04-15 30 23.0 NaN NaN NaN 15.0 NaN NaN 101 NaN NaN
>>> df2
AAPL AMC AMZN ASO ATH SPCE SRNE TH TSLA VIAC WKHS
dt
2021-04-12 41 28.0 NaN 33.0 NaN NaN NaN NaN 56 14.0 NaN
2021-04-13 76 22.0 NaN 12.0 NaN NaN NaN NaN 134 NaN NaN
2021-04-14 21 NaN NaN NaN NaN NaN NaN NaN 61 NaN NaN
2021-04-15 54 43.0 NaN NaN NaN 16.0 NaN NaN 83 NaN NaN
Current_df:
Unnamed: 0 Div Date Time HomeTeam AwayTeam FTHG FTAG FTR HTHG HTAG HTR Referee Unnamed: 62 GB>2.5 GB<2.5 GBAHH GBAHA GBAH HT AT
0 0 E0 2019-08-09 20:00:00 Liverpool Norwich 4 1 H 4 0 H M Oliver NaN NaN NaN NaN NaN NaN NaN NaN
1 1 E0 2019-08-10 12:30:00 West Ham Man City 0 5 A 0 1 A M Dean NaN NaN NaN NaN NaN NaN NaN NaN
2 2 E0 2019-08-10 15:00:00 Bournemouth Sheffield United 1 1 D 0 0 D K Friend NaN NaN NaN NaN NaN NaN NaN NaN
3 3 E0 2019-08-10 15:00:00 Burnley Southampton 3 0 H 0 0 D G Scott NaN NaN NaN NaN NaN NaN NaN NaN
4 4 E0 2019-08-10 15:00:00 Crystal Palace Everton 0 0 D 0 0 D J Moss NaN NaN NaN NaN NaN NaN NaN NaN
5 5 E0 2019-08-10 15:00:00 Watford Brighton 0 3 A 0 1 A C Pawson NaN NaN NaN NaN NaN NaN NaN NaN
6 6 E0 2019-08-10 17:30:00 Tottenham Aston Villa 3 1 H 0 1 A C Kavanagh NaN NaN NaN NaN NaN NaN NaN NaN
7 7 E0 2019-08-11 14:00:00 Leicester Wolves 0 0 D 0 0 D A Marriner NaN NaN NaN NaN NaN NaN NaN NaN
8 7084 G1 2004-09-18 NaN NaN NaN 0 1 A 0 0 D NaN NaN 1.83 1.83 1.66 1.95 0.5 Ergotelis Iraklis
9 7085 G1 2004-09-18 NaN NaN NaN 3 1 H 1 1 D NaN NaN 2.00 1.65 1.90 1.71 -0.5 Xanthi Aris
10 7086 G1 2004-09-19 NaN NaN NaN 1 0 H 1 0 H NaN NaN 2.00 1.65 1.85 1.85 0.0 Chalkidona Panionios
11 7087 G1 2004-09-19 NaN NaN NaN 1 1 D 0 0 D NaN NaN 1.83 1.83 1.67 1.95 0.5 Egaleo AEK
12 7088 G1 2004-09-19 NaN NaN NaN 1 0 H 1 0 H NaN NaN 1.85 1.79 1.85 1.85 0.0 Kalamaria OFI
13 7089 G1 2004-09-19 NaN NaN NaN 2 1 H 1 1 D NaN NaN NaN NaN NaN NaN NaN Olympiakos Kalithea
14 7090 G1 2004-09-19 NaN NaN NaN 3 0 H 2 0 H NaN NaN NaN NaN NaN NaN NaN Panathinaikos Ionikos
Expected df:
Unnamed: 0 Div Date Time HomeTeam AwayTeam FTHG FTAG FTR HTHG HTAG HTR Referee Unnamed: 62 GB>2.5 GB<2.5 GBAHH GBAHA GBAH HT AT
0 0 E0 2019-08-09 20:00:00 Liverpool Norwich 4 1 H 4 0 H M Oliver NaN NaN NaN NaN NaN NaN NaN NaN
1 1 E0 2019-08-10 12:30:00 West Ham Man City 0 5 A 0 1 A M Dean NaN NaN NaN NaN NaN NaN NaN NaN
2 2 E0 2019-08-10 15:00:00 Bournemouth Sheffield United 1 1 D 0 0 D K Friend NaN NaN NaN NaN NaN NaN NaN NaN
3 3 E0 2019-08-10 15:00:00 Burnley Southampton 3 0 H 0 0 D G Scott NaN NaN NaN NaN NaN NaN NaN NaN
4 4 E0 2019-08-10 15:00:00 Crystal Palace Everton 0 0 D 0 0 D J Moss NaN NaN NaN NaN NaN NaN NaN NaN
5 5 E0 2019-08-10 15:00:00 Watford Brighton 0 3 A 0 1 A C Pawson NaN NaN NaN NaN NaN NaN NaN NaN
6 6 E0 2019-08-10 17:30:00 Tottenham Aston Villa 3 1 H 0 1 A C Kavanagh NaN NaN NaN NaN NaN NaN NaN NaN
7 7 E0 2019-08-11 14:00:00 Leicester Wolves 0 0 D 0 0 D A Marriner NaN NaN NaN NaN NaN NaN NaN NaN
8 7084 G1 2004-09-18 NaN NaN NaN 0 1 A 0 0 D NaN NaN 1.83 1.83 1.66 1.95 0.5 NaN NaN
9 7085 G1 2004-09-18 NaN Ergotelis Iraklis 3 1 H 1 1 D NaN NaN 2.00 1.65 1.90 1.71 -0.5 NaN NaN
10 7086 G1 2004-09-19 NaN Xanthi Aris 1 0 H 1 0 H NaN NaN 2.00 1.65 1.85 1.85 0.0 NaN NaN
11 7087 G1 2004-09-19 NaN Chalkidona Panionios 1 1 D 0 0 D NaN NaN 1.83 1.83 1.67 1.95 0.5 NaN NaN
12 7088 G1 2004-09-19 NaN Egaleo AEK 1 0 H 1 0 H NaN NaN 1.85 1.79 1.85 1.85 0.0 NaN NaN
13 7089 G1 2004-09-19 NaN Kalamaria OFI 2 1 H 1 1 D NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 7090 G1 2004-09-19 NaN Olympiakos Kalithea 3 0 H 2 0 H NaN NaN NaN NaN NaN NaN NaN NaN NaN
Essentially, I want to place non null values of HT and AT to HomeTeam and AwayTeam columns
There does not seem to be a straightforward way; there are many ways I guess;
Create a new column with an IF HT and AT not blank and HomeTeam and
AwayTeam blank then HT and AT else HomeTeam and AwayTeam
If (In column HomeTeam and AwayTeam) If HomeTeam and AwayTeam blank then HT
and AT else HomeTeam and Away Team.
How can I go about it in pandas?
You can do this considering df is your pandas Dataframe and you have imported NumPy as np
df = df.replace('', np.nan)
And after that apply a lambda function looking for the 'NaN' value like in the code below:
import pandas as pd
names = {'First_name': ['Jon','Bill','Maria','Emma']}
df = pd.DataFrame(names,columns=['First_name'])
df['name_match'] = df['First_name'].apply(lambda x: 'Match' if x == 'Bill' else 'Mismatch')
print (df)
I have three dataframes. Each dataframe has date as column. I want to left join the three using date column. Date are present in the form 'yyyy-mm-dd'. I want to merge the dataframe using 'yyyy-mm' only.
df1
Date X
31-05-2014 1
30-06-2014 2
31-07-2014 3
31-08-2014 4
30-09-2014 5
31-10-2014 6
30-11-2014 7
31-12-2014 8
31-01-2015 1
28-02-2015 3
31-03-2015 4
30-04-2015 5
df2
Date Y
01-09-2014 1
01-10-2014 4
01-11-2014 6
01-12-2014 7
01-01-2015 2
01-02-2015 3
01-03-2015 6
01-04-2015 4
01-05-2015 3
01-06-2015 4
01-07-2015 5
01-08-2015 2
df3
Date Z
01-07-2015 9
01-08-2015 2
01-09-2015 4
01-10-2015 1
01-11-2015 2
01-12-2015 3
01-01-2016 7
01-02-2016 4
01-03-2016 9
01-04-2016 2
01-05-2016 4
01-06-2016 1
Try:
df4 = pd.merge(df1,df2, how='left', on='Date')
Result:
Date X Y
0 2014-05-31 1 NaN
1 2014-06-30 2 NaN
2 2014-07-31 3 NaN
3 2014-08-31 4 NaN
4 2014-09-30 5 NaN
5 2014-10-31 6 NaN
6 2014-11-30 7 NaN
7 2014-12-31 8 NaN
8 2015-01-31 1 NaN
9 2015-02-28 3 NaN
10 2015-03-31 4 NaN
11 2015-04-30 5 NaN
Use Series.dt.to_period with months periods and merge by multiple DataFrames in list:
import functools
dfs = [df1, df2, df3]
dfs = [x.assign(per=x['Date'].dt.to_period('m')) for x in dfs]
df = functools.reduce(lambda left,right: pd.merge(left,right,on='per', how='left'), dfs)
print (df)
Date_x X per Date_y Y Date Z
0 2014-05-31 1 2014-05 NaT NaN NaT NaN
1 2014-06-30 2 2014-06 NaT NaN NaT NaN
2 2014-07-31 3 2014-07 NaT NaN NaT NaN
3 2014-08-31 4 2014-08 NaT NaN NaT NaN
4 2014-09-30 5 2014-09 2014-09-01 1.0 NaT NaN
5 2014-10-31 6 2014-10 2014-10-01 4.0 NaT NaN
6 2014-11-30 7 2014-11 2014-11-01 6.0 NaT NaN
7 2014-12-31 8 2014-12 2014-12-01 7.0 NaT NaN
8 2015-01-31 1 2015-01 2015-01-01 2.0 NaT NaN
9 2015-02-28 3 2015-02 2015-02-01 3.0 NaT NaN
10 2015-03-31 4 2015-03 2015-03-01 6.0 NaT NaN
11 2015-04-30 5 2015-04 2015-04-01 4.0 NaT NaN
Alternative:
df1['per'] = df1['Date'].dt.to_period('m')
df2['per'] = df2['Date'].dt.to_period('m')
df3['per'] = df3['Date'].dt.to_period('m')
df4 = pd.merge(df1,df2, how='left', on='per').merge(df3, how='left', on='per')
print (df4)
Date_x X per Date_y Y Date Z
0 2014-05-31 1 2014-05 NaT NaN NaT NaN
1 2014-06-30 2 2014-06 NaT NaN NaT NaN
2 2014-07-31 3 2014-07 NaT NaN NaT NaN
3 2014-08-31 4 2014-08 NaT NaN NaT NaN
4 2014-09-30 5 2014-09 2014-09-01 1.0 NaT NaN
5 2014-10-31 6 2014-10 2014-10-01 4.0 NaT NaN
6 2014-11-30 7 2014-11 2014-11-01 6.0 NaT NaN
7 2014-12-31 8 2014-12 2014-12-01 7.0 NaT NaN
8 2015-01-31 1 2015-01 2015-01-01 2.0 NaT NaN
9 2015-02-28 3 2015-02 2015-02-01 3.0 NaT NaN
10 2015-03-31 4 2015-03 2015-03-01 6.0 NaT NaN
11 2015-04-30 5 2015-04 2015-04-01 4.0 NaT NaN
I want to relace values in a dataframe, with a 0 where is a NaN value and with 1 where is a value.
here is my data:
AA AAPL FB GOOG TSLA XOM
Date
2018-02-28 NaN 0.068185 NaN NaN -0.031752 NaN
2018-03-31 -0.000222 NaN NaN NaN NaN -0.014920
2018-04-30 0.138790 NaN NaN NaN 0.104347 NaN
2018-05-31 NaN 0.135124 0.115 NaN NaN NaN
2018-06-30 NaN NaN NaN 0.028258 0.204474 NaN
2018-07-31 NaN 0.027983 NaN 0.091077 NaN NaN
2018-08-31 0.032355 0.200422 NaN NaN NaN NaN
2018-09-30 NaN -0.008303 NaN NaN NaN 0.060496
2018-10-31 NaN -0.030478 NaN NaN 0.274011 NaN
2018-11-30 NaN NaN NaN 0.016401 0.039013 NaN
2018-12-31 NaN NaN NaN -0.053745 -0.050445 NaN
Use mask and fillna:
df = df.mask(df.notna(), 1).fillna(0, downcast='infer')
Use:
df[df.notnull() == True] = 1
df.fillna(0, inplace=True)
Cast the Boolean values to int.
df.notnull().astype(int)
AA AAPL FB GOOG TSLA XOM
2018-02-28 0 1 0 0 1 0
2018-03-31 1 0 0 0 0 1
2018-04-30 1 0 0 0 1 0
2018-05-31 0 1 1 0 0 0
2018-06-30 0 0 0 1 1 0
Following the question I asked: Combine similar rows to one row in python dataframe1
I have the original data below, and have 2 questions want to ask :
yyyymmdd hr ariel cat kiki mmax vicky gaolie shiu nick ck
0 2015-12-27 9 0 0 0 0 0 0 0 23 0
1 2015-12-27 10 0 0 0 0 0 0 0 2 0
2 2015-12-27 11 0 0 0 0 0 0 0 20 0
3 2015-12-27 12 0 0 0 0 0 0 0 4 0
4 2015-12-27 17 0 0 0 0 0 0 0 2 0
5 2015-12-27 19 1 0 0 0 0 0 0 0 0
6 2015-12-28 8 0 8 0 0 0 0 0 0 0
7 2015-12-28 9 11 11 0 0 0 0 19 0 0
8 2015-12-28 10 85 13 0 0 2 0 15 0 0
9 2015-12-28 11 2 11 0 0 2 0 14 0 0
10 2015-12-28 12 2 20 0 4 0 0 10 0 0
11 2015-12-28 13 8 9 0 9 3 0 9 0 0
12 2015-12-28 14 4 10 0 8 0 0 22 0 0
13 2015-12-28 15 3 3 0 2 0 0 16 0 0
14 2015-12-28 16 14 5 1 1 0 0 19 0 0
15 2015-12-28 17 15 1 2 0 0 0 19 0 0
16 2015-12-28 18 0 0 0 6 0 0 0 0 0
17 2015-12-28 19 0 0 0 5 0 0 0 0 0
18 2015-12-28 20 0 0 0 1 0 0 0 0 0
how can I "fill" the "hr" index of the DataFrame? The result should be something like this:
yyyymmdd hr ariel cat kiki mmax vicky gaolie shiu nick ck
12/27/15 8 NaN NaN NaN NaN NaN NaN NaN NaN NaN
12/27/15 9 0 0 0 0 0 0 0 23 0
12/27/15 10 0 0 0 0 0 0 0 2 0
12/27/15 11 0 0 0 0 0 0 0 20 0
12/27/15 12 0 0 0 0 0 0 0 4 0
12/27/15 13 NaN NaN NaN NaN NaN NaN NaN NaN NaN
12/27/15 14 NaN NaN NaN NaN NaN NaN NaN NaN NaN
12/27/15 15 NaN NaN NaN NaN NaN NaN NaN NaN NaN
12/27/15 16 NaN NaN NaN NaN NaN NaN NaN NaN NaN
12/27/15 17 0 0 0 0 0 0 0 2 0
12/27/15 18 NaN NaN NaN NaN NaN NaN NaN NaN NaN
12/27/15 19 1 0 0 0 0 0 0 0 0
12/27/15 20 NaN NaN NaN NaN NaN NaN NaN NaN NaN
12/28/15 8 0 8 0 0 0 0 0 0 0
12/28/15 9 11 11 0 0 0 0 19 0 0
12/28/15 10 85 13 0 0 2 0 15 0 0
12/28/15 11 2 11 0 0 2 0 14 0 0
12/28/15 12 2 20 0 4 0 0 10 0 0
12/28/15 13 8 9 0 9 3 0 9 0 0
12/28/15 14 4 10 0 8 0 0 22 0 0
12/28/15 15 3 3 0 2 0 0 16 0 0
12/28/15 16 14 5 1 1 0 0 19 0 0
12/28/15 17 15 1 2 0 0 0 19 0 0
12/28/15 18 0 0 0 6 0 0 0 0 0
12/28/15 19 0 0 0 5 0 0 0 0 0
12/28/15 20 0 0 0 1 0 0 0 0 0
how can I plot the line charts based on columns and hr ?
x-axis = columns , i.e. : ariel ,cat, kiki...
y-axis = hr, i.e. : 8,9,10...20
every subplot represents one date (i.e. 2015-12-27, 2015-12-28..)
and here is the framework of the plot I want to get :
please click here for the picture
You can convert yyyymmdd to datetime, combine with the hr information and then resample to hourly frequency like so:
df.yyyymmdd = pd.to_datetime(df.yyyymmdd)
df.yyyymmdd = df.apply(lambda x: x.yyyymmdd + pd.DateOffset(hours = x.hr), axis=1)
df.set_index('yyyymmdd', inplace=True)
df = df.resample('H')
to get:
hr ariel cat kiki mmax vicky gaolie shiu nick ck
yyyymmdd
2015-12-27 09:00:00 9 0 0 0 0 0 0 0 23 0
2015-12-27 10:00:00 10 0 0 0 0 0 0 0 2 0
2015-12-27 11:00:00 11 0 0 0 0 0 0 0 20 0
2015-12-27 12:00:00 12 0 0 0 0 0 0 0 4 0
2015-12-27 13:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-27 14:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-27 15:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-27 16:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-27 17:00:00 17 0 0 0 0 0 0 0 2 0
2015-12-27 18:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-27 19:00:00 19 1 0 0 0 0 0 0 0 0
2015-12-27 20:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-27 21:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-27 22:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-27 23:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-28 00:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-28 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-28 02:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-28 03:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-28 04:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-28 05:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-28 06:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-28 07:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2015-12-28 08:00:00 8 0 8 0 0 0 0 0 0 0
2015-12-28 09:00:00 9 11 11 0 0 0 0 19 0 0
2015-12-28 10:00:00 10 85 13 0 0 2 0 15 0 0
2015-12-28 11:00:00 11 2 11 0 0 2 0 14 0 0
2015-12-28 12:00:00 12 2 20 0 4 0 0 10 0 0
2015-12-28 13:00:00 13 8 9 0 9 3 0 9 0 0
2015-12-28 14:00:00 14 4 10 0 8 0 0 22 0 0
2015-12-28 15:00:00 15 3 3 0 2 0 0 16 0 0
2015-12-28 16:00:00 16 14 5 1 1 0 0 19 0 0
2015-12-28 17:00:00 17 15 1 2 0 0 0 19 0 0
2015-12-28 18:00:00 18 0 0 0 6 0 0 0 0 0
2015-12-28 19:00:00 19 0 0 0 5 0 0 0 0 0
2015-12-28 20:00:00 20 0 0 0 1 0 0 0 0 0
You could plot the result as follows - assuming that you are looking for one subplot for each date and column:
for d, data in df.groupby(pd.TimeGrouper('D')):
data.plot.line(figsize=(10, 20), sharey=True)
plt.gcf().savefig('cats {}.png'.format(d), bbox_inches='tight')
plt.close()
to get: