Spaces:
Runtime error
Runtime error
from collections import defaultdict | |
from datetime import datetime | |
def count_orders_by_state_and_day(data): | |
""" | |
Count the number of orders for each state day-wise, considering only the last state for each order on a given day. | |
Args: | |
data (list): A list of orders, where each order contains state changes and timestamps. | |
Returns: | |
dict: A dictionary with states as keys and another dictionary as values. | |
The inner dictionary contains dates as keys and their counts as values. | |
""" | |
last_state_by_order_and_date = {} | |
# Iterate through the orders to track the last state for each order on each date | |
for order in data.get("data", []): | |
for detail in order.get("data", []): | |
state = detail.get("order_state") | |
timestamp = detail.get("timestamp_unix") | |
order_id = detail.get("order_id") | |
if state and timestamp and order_id: | |
date = datetime.fromtimestamp(timestamp / 1000).date() | |
last_state_by_order_and_date[(order_id, date)] = state | |
# Count the last states for each date | |
orders_state_count_by_day = defaultdict(lambda: defaultdict(int)) | |
for (order_id, date), state in last_state_by_order_and_date.items(): | |
orders_state_count_by_day[date][state] += 1 | |
# Prepare the final output in the desired format | |
formatted_output = defaultdict(lambda: defaultdict(int)) | |
for date, state_counts in orders_state_count_by_day.items(): | |
for state, count in state_counts.items(): | |
state_key = f"number_of_order_{state.lower()}" | |
formatted_output[state_key][str(date)] += count | |
# Convert defaultdict to regular dict for cleaner output | |
final_output = {state: dict(date_counts) for state, date_counts in formatted_output.items()} | |
return final_output |