{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# cumsum - 累加计算\n",
"\n",
"cumsum 可以对数据按照指定方式进行累加,[👉官方文档](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.cumsum.html)\n",
"\n",
"```{admonition} 在线刷题\n",
":class: seealso\n",
"\n",
"检查 or 强化 `Pandas` 数据分析操作?👉在线体验「Pandas进阶修炼300题」\n",
"```\n",
"\n",
"```{note} \n",
"本页面代码可以[在线编辑、执行](../指引/在线执行.md)!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 按列累加\n",
"\n",
"将 df7 按列进行累加"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"tags": [
"hide-input",
"thebe-init"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" item | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
" 4 | \n",
" Apple | \n",
"
\n",
" \n",
" 1 | \n",
" 5 | \n",
" 6 | \n",
" 7 | \n",
" 8 | \n",
" Xiaomi | \n",
"
\n",
" \n",
" 2 | \n",
" 9 | \n",
" 10 | \n",
" 11 | \n",
" 12 | \n",
" Huawei | \n",
"
\n",
" \n",
" 3 | \n",
" 13 | \n",
" 14 | \n",
" 15 | \n",
" 16 | \n",
" Apple | \n",
"
\n",
" \n",
" 4 | \n",
" 17 | \n",
" 18 | \n",
" 19 | \n",
" 20 | \n",
" Xiaomi | \n",
"
\n",
" \n",
" 5 | \n",
" 21 | \n",
" 22 | \n",
" 23 | \n",
" 24 | \n",
" Huawei | \n",
"
\n",
" \n",
" 6 | \n",
" 25 | \n",
" 26 | \n",
" 27 | \n",
" 28 | \n",
" Apple | \n",
"
\n",
" \n",
" 7 | \n",
" 29 | \n",
" 30 | \n",
" 31 | \n",
" 32 | \n",
" Xiaomi | \n",
"
\n",
" \n",
" 8 | \n",
" 33 | \n",
" 34 | \n",
" 35 | \n",
" 36 | \n",
" Huawei | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D item\n",
"0 1 2 3 4 Apple\n",
"1 5 6 7 8 Xiaomi\n",
"2 9 10 11 12 Huawei\n",
"3 13 14 15 16 Apple\n",
"4 17 18 19 20 Xiaomi\n",
"5 21 22 23 24 Huawei\n",
"6 25 26 27 28 Apple\n",
"7 29 30 31 32 Xiaomi\n",
"8 33 34 35 36 Huawei"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"df7 = pd.DataFrame(np.arange(1,37).reshape([9,4]), columns=[\"A\", \"B\",\"C\",\"D\"])\n",
"df7['item'] = ['Apple','Xiaomi','Huawei'] * 3\n",
"df7"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
" 4 | \n",
"
\n",
" \n",
" 1 | \n",
" 6 | \n",
" 8 | \n",
" 10 | \n",
" 12 | \n",
"
\n",
" \n",
" 2 | \n",
" 15 | \n",
" 18 | \n",
" 21 | \n",
" 24 | \n",
"
\n",
" \n",
" 3 | \n",
" 28 | \n",
" 32 | \n",
" 36 | \n",
" 40 | \n",
"
\n",
" \n",
" 4 | \n",
" 45 | \n",
" 50 | \n",
" 55 | \n",
" 60 | \n",
"
\n",
" \n",
" 5 | \n",
" 66 | \n",
" 72 | \n",
" 78 | \n",
" 84 | \n",
"
\n",
" \n",
" 6 | \n",
" 91 | \n",
" 98 | \n",
" 105 | \n",
" 112 | \n",
"
\n",
" \n",
" 7 | \n",
" 120 | \n",
" 128 | \n",
" 136 | \n",
" 144 | \n",
"
\n",
" \n",
" 8 | \n",
" 153 | \n",
" 162 | \n",
" 171 | \n",
" 180 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"0 1 2 3 4\n",
"1 6 8 10 12\n",
"2 15 18 21 24\n",
"3 28 32 36 40\n",
"4 45 50 55 60\n",
"5 66 72 78 84\n",
"6 91 98 105 112\n",
"7 120 128 136 144\n",
"8 153 162 171 180"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df7[list('ABCD')].cumsum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 按行累加\n",
"\n",
"将 df7 按行进行累加"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 3 | \n",
" 6 | \n",
" 10 | \n",
"
\n",
" \n",
" 1 | \n",
" 5 | \n",
" 11 | \n",
" 18 | \n",
" 26 | \n",
"
\n",
" \n",
" 2 | \n",
" 9 | \n",
" 19 | \n",
" 30 | \n",
" 42 | \n",
"
\n",
" \n",
" 3 | \n",
" 13 | \n",
" 27 | \n",
" 42 | \n",
" 58 | \n",
"
\n",
" \n",
" 4 | \n",
" 17 | \n",
" 35 | \n",
" 54 | \n",
" 74 | \n",
"
\n",
" \n",
" 5 | \n",
" 21 | \n",
" 43 | \n",
" 66 | \n",
" 90 | \n",
"
\n",
" \n",
" 6 | \n",
" 25 | \n",
" 51 | \n",
" 78 | \n",
" 106 | \n",
"
\n",
" \n",
" 7 | \n",
" 29 | \n",
" 59 | \n",
" 90 | \n",
" 122 | \n",
"
\n",
" \n",
" 8 | \n",
" 33 | \n",
" 67 | \n",
" 102 | \n",
" 138 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"0 1 3 6 10\n",
"1 5 11 18 26\n",
"2 9 19 30 42\n",
"3 13 27 42 58\n",
"4 17 35 54 74\n",
"5 21 43 66 90\n",
"6 25 51 78 106\n",
"7 29 59 90 122\n",
"8 33 67 102 138"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df7[list('ABCD')].cumsum(axis = 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 分组累加\n",
"\n",
"将 df7 按照 `item` 按不同组对第 A 列进行累加"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" item | \n",
" cusum | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
" 4 | \n",
" Apple | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 13 | \n",
" 14 | \n",
" 15 | \n",
" 16 | \n",
" Apple | \n",
" 14 | \n",
"
\n",
" \n",
" 2 | \n",
" 25 | \n",
" 26 | \n",
" 27 | \n",
" 28 | \n",
" Apple | \n",
" 39 | \n",
"
\n",
" \n",
" 3 | \n",
" 9 | \n",
" 10 | \n",
" 11 | \n",
" 12 | \n",
" Huawei | \n",
" 9 | \n",
"
\n",
" \n",
" 4 | \n",
" 21 | \n",
" 22 | \n",
" 23 | \n",
" 24 | \n",
" Huawei | \n",
" 30 | \n",
"
\n",
" \n",
" 5 | \n",
" 33 | \n",
" 34 | \n",
" 35 | \n",
" 36 | \n",
" Huawei | \n",
" 63 | \n",
"
\n",
" \n",
" 6 | \n",
" 5 | \n",
" 6 | \n",
" 7 | \n",
" 8 | \n",
" Xiaomi | \n",
" 5 | \n",
"
\n",
" \n",
" 7 | \n",
" 17 | \n",
" 18 | \n",
" 19 | \n",
" 20 | \n",
" Xiaomi | \n",
" 22 | \n",
"
\n",
" \n",
" 8 | \n",
" 29 | \n",
" 30 | \n",
" 31 | \n",
" 32 | \n",
" Xiaomi | \n",
" 51 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D item cusum\n",
"0 1 2 3 4 Apple 1\n",
"1 13 14 15 16 Apple 14\n",
"2 25 26 27 28 Apple 39\n",
"3 9 10 11 12 Huawei 9\n",
"4 21 22 23 24 Huawei 30\n",
"5 33 34 35 36 Huawei 63\n",
"6 5 6 7 8 Xiaomi 5\n",
"7 17 18 19 20 Xiaomi 22\n",
"8 29 30 31 32 Xiaomi 51"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df7 = df7.sort_values(['item']).reset_index(drop=True)\n",
"df7['cusum']=df7.groupby('item')['A'].cumsum(axis=0)\n",
"df7"
]
}
],
"metadata": {
"celltoolbar": "Tags",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 4
}