I want to convert month wise(BP,RE) values into day wise(BP,RE) values by dividing month wise value by corresponding number of days in that month in a dataframe except for one category named Quality Parameters.I want to show day wise value for the category named Quality Parameters as the same value of month wise value(eg: if January month value is 45, I want to show day wise values from first of January to 31st of January as 45.Similarly for all months).
I used the below code for splitting month wise data into day wise.In this exception is not handled(category named Quality Parametes):
distillery_excel_data_upper = distillery_excel_data.apply(lambda x: x.astype(pd.StringDtype()).str.upper())
distillery_excel_data_upper['Date'] = pd.to_datetime(distillery_excel_data_upper['Year'] + distillery_excel_data_upper['Month'], format='%Y%B')
excel_date = pd.to_datetime(distillery_excel_data_upper['Date'])
daywise_excel_data = (distillery_excel_data_upper.assign(Daily=[pd.date_range(*x, freq='D') for x in zip(excel_date, excel_date.add(pd.offsets.MonthEnd()))]).explode("Daily"))
daywise_excel_data["BP"] = daywise_excel_data["BP"].apply(pd.to_numeric)
daywise_excel_data["RE"] = daywise_excel_data["RE"].apply(pd.to_numeric)
daywise_excel_data[['BP', 'RE']] = daywise_excel_data[['BP', 'RE']].div(
daywise_excel_data.groupby(["Date", "Category", "Parameter", "Region", "Factory", "UOM"])['Date'].transform("count"), axis=0)
daywise_excel_data = daywise_excel_data.drop(['Date', 'Year', 'Month'], axis=1)
daywise_excel_data.rename(columns={'Daily': 'date'}, inplace=True)
Above code is applicable for all categories.In this BP,RE,Category,Parameter,Region,Factory,UOM,Year and Month are dataframe columns.
Below shows the input dataframe:
Year Month Region Factory Category Parameter UOM BP RE
0 2023 April Tamil Nadu A Production ac L 30.0 60.0
1 2023 April Tamil Nadu B Quality Parameter acc L 45.0 20.0
2 2023 April Karnataka C Quality Parameter bc L 23.0 50.0
3 2023 May Karnataka C Quality Parameter bc L 0.0 43.0
4 2023 June Karnataka C Quality Parameter bc L 10.0 56.0
5 2023 June Karnataka C Production bc L 60.0 90.0
Desired output:
Year Month Date Region Factory Category Parameter UOM BP RE
0 2023 April 2023-04-01 Tamil Nadu A Production ac L 1.0 2.0
0 2023 April 2023-04-02 Tamil Nadu A Production ac L 1.0 2.0
.. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. ..
0 2023 April 2023-04-30 Tamil Nadu A Production ac L 1.0 2.0
1 2023 April 2023-04-01 Tamil Nadu B Quality Parameter acc L 45.0 20.0
1 2023 April 2023-04-02 Tamil Nadu B Quality Parameter acc L 45.0 20.0
.. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. ..
1 2023 April 2023-04-30 Tamil Nadu B Quality Parameter acc L 45.0 20.0
2 2023 April 2023-04-01 Karnataka C Quality Parameter acc L 23.0 50.0
2 2023 April 2023-04-02 Karnataka C Quality Parameter acc L 23.0 50.0
.. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. ..
2 2023 April 2023-04-30 Karnataka C Quality Parameter acc L 23.0 50.0
3 2023 May 2023-05-01 Karnataka C Quality Parameter acc L 0.0 43.0
3 2023 May 2023-05-02 Karnataka C Quality Parameter acc L 0.0 43.0
.. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. ..
3 2023 May 2023-05-31 Karnataka C Quality Parameter acc L 0.0 43.0
4 2023 June 2023-05-01 Karnataka C Quality Parameter acc L 10.0 56.0
4 2023 June 2023-05-02 Karnataka C Quality Parameter acc L 10.0 56.0
.. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. ..
4 2023 June 2023-05-30 Karnataka C Quality Parameter acc L 10.0 56.0
5 2023 June 2023-05-01 Karnataka C Production acc L 2.0 3.0
5 2023 June 2023-05-02 Karnataka C Production acc L 2.0 3.0
.. .. .. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. .. .. ..
5 2023 June 2023-05-30 Karnataka C Production acc L 2.0 3.0
Can anyone suggest a solution to achieve this result.