Pandas pivot table columns (0 to 23) rows (1 to 30 dates)

i have dataframe with Date field from that i make year, month, dates, hour, fields
then i will filter dataframe for particular month
then i make pandas pivot table dates as rows and hours as columns (to show count )
but i need full month dates in row and 0 to 23 hours in column
even though there is no data.

kindly help
Thanks in advance
my data:
Stcode ResNo startdate
1101 2223 23-02-2022 23:10
1101 2233 14-02-2022 00:34

Hi there,

Thanks for sharing your question with the community! Check out our guidelines on how to post an effective question here – in particular, please include a code snippet that will allow us to reproduce the issue.

Caroline :balloon:

data1 = pd.read_csv(“countR.csv”,dayfirst=True, parse_dates=True,encoding=‘latin1’,error_bad_lines=False)

data=data1[[‘Reservation_start_date’,‘Reservation_branch_code’,‘Reservation_vehicle_group’]].copy()

data["Reservation_start_date"]=pd.to_datetime(data['Reservation_start_date'],dayfirst=True)
data['year']=pd.to_datetime(data['Reservation_start_date']).dt.year
data['month'] = pd.to_datetime(data['Reservation_start_date']).dt.month
data['date']=pd.to_datetime(data['Reservation_start_date']).dt.date
data['hour']=pd.to_datetime(data['Reservation_start_date']).dt.hour

here i filter dataframe for a particular month

pivot = data.pivot_table(index=[‘date’,‘WeekdayName’],
columns=‘hour’,
values=‘Reservation_branch_code’,
fill_value=“”,
margins=False,
aggfunc=len)
pivot = pivot.reindex(columns=np.arange(24), fill_value=“”)
pivot = pivot.astype(str)
st.dataframe(pivot)

i get 0-23 hours in column i need all dates of the month in rows
also i need another help counted values showing with fraction i need integer part only
like 1 ,2,5 not 1.0, 2.0, 5.0
many thanks for streamlit community.

Hi @B_Ismail,

Thanks for sharing that! Please update your post to format your code properly (the link I shared above provides on instructions on how to do so).

Caroline

data1 = pd.read_csv("countR.csv",dayfirst=True, parse_dates=True,encoding='latin1',error_bad_lines=False)
     

data=data1[['Reservation_start_date','Reservation_branch_code','Reservation_vehicle_group']].copy()

data["Reservation_start_date"]=pd.to_datetime(data['Reservation_start_date'],dayfirst=True)
data['year']=pd.to_datetime(data['Reservation_start_date']).dt.year
data['month'] = pd.to_datetime(data['Reservation_start_date']).dt.month
data['date']=pd.to_datetime(data['Reservation_start_date']).dt.date
data['hour']=pd.to_datetime(data['Reservation_start_date']).dt.hour
data['date']=pd.to_datetime(data['date'])


data=data[data['month']==9]  # may be different month 
data=data[data['Reservation_branch_code']==1163]   # any branch code  


data['date1']=pd.to_datetime(data['date'],dayfirst=True).dt.date
pivot = data.pivot_table(index=['date1'],
                            columns='hour',
                            values='Reservation_branch_code',
                            fill_value="",
                            margins=True,
                            dropna=True,
                            aggfunc=len)

    
pivot = pivot.reindex(columns=np.arange(24) ,fill_value="")

pivot=pivot.astype(str)  # this is needed if fill value is ""  
st.dataframe(pivot) 
   

StreamlitAPIException : (“object of type <class ‘str’> cannot be converted to int”, ‘Conversion failed for column date1 with type object’)

this is the message i get…kindly correct my code…i need fill value “” not 0…and even there is no data i need to show full month dates…and integer number in count not with decimal …many thanks for your time.

Hi

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.