Мой код не читал неделю 22 и неделю 28 в DataFrame [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Мой код не читал неделю 22 и неделю 28 в DataFrame [закрыто]

Сообщение Anonymous »

По какой -то причине код неправильно читает DataFrame; Например, в 22 и 28 недель, которые имеют несколько точек данных, он игнорирует их и возвращает, как если бы эти данные не существовали. < /p>
PRINCIPAL_FILE = Path(r"C:/Users/4163819/Desktop/Ksmart/AOIReport-YieldDataNEW.xlsx")
SHEET = "Ksmart"
OUT_MATRIX = Path(r"C:/Users/4163819/Desktop/Ksmart/Customer_Index_Last12Weeks.xlsx")

# ───── 1. LER e NORMALIZAR ───────────────────────────────────────
df = pd.read_excel(PRINCIPAL_FILE, sheet_name=SHEET, engine="openpyxl")
df["Day"] = pd.to_datetime(df["Day"], errors="coerce")
df = df.dropna(subset=["Day"])

for txt in ["Machine Name", "Job Name", "CUSTOMER"]:
df[txt] = df[txt].astype(str).str.strip()

# Converter colunas numéricas
num_cols = ["Total Component", "Pass Component", "False Call Component", "NG Component"]
for col in num_cols:
df[col] = (
df[col].astype(str)
.str.replace(",", ".", regex=False)
.str.strip()
.pipe(pd.to_numeric, errors="coerce")
.fillna(0)
)

# ───── 2. DEFINIR as 12 semanas mais recentes (base: Monday) ────
today = pd.Timestamp.today().normalize()
current_monday = today - pd.to_timedelta(today.weekday(), unit="d")
week_dates = pd.date_range(end=current_monday, periods=12, freq="W-MON")

# Criar coluna de segunda-feira ISO de cada linha
df["WeekDate"] = df["Day"].dt.to_period("W").apply(lambda p: p.start_time)

# ───── 3. CALCULAR índice por cliente/semana ─────────────────────
results = []

for monday in week_dates:
window_start = monday - pd.Timedelta(weeks=11)
window_df = df[df["WeekDate"].between(window_start, monday)]

clientes_semana = window_df.loc[window_df["WeekDate"] == monday, "CUSTOMER"].unique()

if len(clientes_semana) == 0:
# Sem produção nesta semana → cria coluna vazia
col_name = f"{monday.isocalendar().year}_W{str(monday.isocalendar().week).zfill(2)}"
empty = pd.DataFrame(columns=["CUSTOMER", col_name])
results.append(empty)
continue

current_clients_df = window_df[window_df["CUSTOMER"].isin(clientes_semana)]

agg = current_clients_df.groupby("CUSTOMER").agg(
Total=("Total Component", "sum"),
Pass=("Pass Component", "sum"),
FalseCall=("False Call Component", "sum"),
NG=("NG Component", "sum"),
).reset_index()

agg["Index"] = (
(agg["Pass"] + agg["FalseCall"] + agg["NG"]) /
agg["Total"].replace(0, pd.NA)
) * 1000

col_name = f"{monday.isocalendar().year}_W{str(monday.isocalendar().week).zfill(2)}"
agg = agg[["CUSTOMER", "Index"]].rename(columns={"Index": col_name})
results.append(agg)

# ───── 4. UNIR tudo em formato MATRIX ────────────────────────────
from functools import reduce
matrix = reduce(lambda left, right: pd.merge(left, right, on="CUSTOMER", how="outer"), results)
matrix = matrix.set_index("CUSTOMER")
matrix = matrix.sort_index()
matrix = matrix[sorted(matrix.columns)] # Ordenar colunas cronologicamente

# ───── 5. SALVAR EM EXCEL ─────────────────────────────────────────
matrix.to_excel(OUT_MATRIX, sheet_name="Customer_Week_Index")


Подробнее здесь: https://stackoverflow.com/questions/797 ... -dataframe
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»