Ответ 1
df['cum_sum'] = df['val1'].cumsum()
df['cum_perc'] = 100*df['cum_sum']/df['val1'].sum()
Это добавит столбцы в df
. Если вам нужна копия, сначала скопируйте df
а затем выполните эти операции с копией.
У меня есть DataFrame
:
df
:
fruit val1 val2
0 orange 15 3
1 apple 10 13
2 mango 5 5
Как мне получить Pandas, чтобы дать мне кумулятивную сумму и процентный столбец только val1
?
Требуемый вывод:
df_with_cumsum
:
fruit val1 val2 cum_sum cum_perc
0 orange 15 3 15 50.00
1 apple 10 13 25 83.33
2 mango 5 5 30 100.00
Я пробовал df.cumsum()
, но он дал мне эту ошибку:
TypeError: ufunc 'isnan' не поддерживается для типов ввода, и входы не могут быть безопасно привязаны к любым поддерживаемым типам в соответствии с правилом литья '' safe ''
df['cum_sum'] = df['val1'].cumsum()
df['cum_perc'] = 100*df['cum_sum']/df['val1'].sum()
Это добавит столбцы в df
. Если вам нужна копия, сначала скопируйте df
а затем выполните эти операции с копией.
Это хороший ответ, но написано в 2014 году. Я просто немного изменил, чтобы он мог передать компилятор, и результаты выглядят аналогично примеру.
df['cum_sum'] = df["val1"].cumsum()
df['cum_perc'] = round(100*df.cum_sum/df["val1"].sum(),2)