Я хотел бы получить фрейм данных с шестой строкой, дающей сумму каждого числового столбца, а затем седьмую строку с процентом суммы этих итогов для каждого числового столбца.
Чтобы создать две новые строки, мне пришлось придумать следующий очень запутанный метод:
df = pl.DataFrame({ "Col Ind": ['A','B','C','D','E'], "Col A": [1,2,3,4,5], "Col B": [2,4,6,8,10], "Col C": [1,3,5,7,9], "Col D": [5,4,3,2,1] }) [/code] Я хотел бы получить фрейм данных с шестой строкой, дающей сумму каждого числового столбца, а затем седьмую строку с процентом суммы этих итогов для каждого числового столбца. Чтобы создать две новые строки, мне пришлось придумать следующий очень запутанный метод: [code]first_col = df.select("Col Ind").to_series().append(pl.Series("temp", ["Total", "Percentage"])) df = df.drop("Col Ind") cols = df.columns expr = df.select(pl.sum(cols)) rowlist = list(expr.row(0)) full = sum(rowlist) pc_row = [] for n in range(len(rowlist)): pc_row.append(int(rowlist[n] /full *100))
pc_dict = dict(zip(cols, pc_row)) pc_df = pl.DataFrame(pc_dict) df = pl.concat([df,expr]) df = pl.concat([df,pc_df]) df.insert_column(0, first_col) [/code] [code]┌────────────┬───────┬───────┬───────┬───────┐ │ Col Ind ┆ Col A ┆ Col B ┆ Col C ┆ Col D │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞════════════╪═══════╪═══════╪═══════╪═══════╡ │ A ┆ 1 ┆ 2 ┆ 1 ┆ 5 │ │ B ┆ 2 ┆ 4 ┆ 3 ┆ 4 │ │ C ┆ 3 ┆ 6 ┆ 5 ┆ 3 │ │ D ┆ 4 ┆ 8 ┆ 7 ┆ 2 │ │ E ┆ 5 ┆ 10 ┆ 9 ┆ 1 │ │ Total ┆ 15 ┆ 30 ┆ 25 ┆ 15 │ │ Percentage ┆ 17 ┆ 35 ┆ 29 ┆ 17 │ └────────────┴───────┴───────┴───────┴───────┘ [/code] Это работает, но кажется, что шагов слишком много. Есть ли более простой способ? Спасибо!