首页 > 解决方案 > 使用 pandas 系列为 df 定义一个函数

问题描述

我想计算属于某个工作组(FAP 列)的部门(ROME 列)的人数(数据框变量)除以该工作组中的总人数。

数据框

工作组的总数存储在变量 Total_FAP 中:

    Total_FAP = df2.Total
    Total_FAP.head() 

这表明

FAP
Agents administratifs et commerciaux des transports et du tourisme                                 63160.0
Agents d'entretien                                                                                718150.0
Agents d'exploitation des transports                                                              142680.0
Agents de gardiennage et de sécurité                                                              465010.0
Agriculteurs, éleveurs, sylviculteurs, bûcherons                                                  121040.0

例如,对于 2010 年,我必须将 ROME A1101 对应于 FAP “Agriculteurs, éleveurs, sylviculteurs, bûcherons”(即 2630)的人数除以 pandas 的总数系列(即 121040)。它会像这样:2630/121040 = 0.02172835426

我想知道是否有办法制作函数,因为我想尝试对数据框进行迭代,但我看到不建议这样做......

谢谢你的帮助

编辑:这是 DF1 的原始数据

{'FAP': {0: 'Agriculteurs, éleveurs, sylviculteurs, bûcherons',
  1: 'Agriculteurs, éleveurs, sylviculteurs, bûcherons',
  2: 'Agriculteurs, éleveurs, sylviculteurs, bûcherons',
  3: 'Agriculteurs, éleveurs, sylviculteurs, bûcherons',
  4: 'Agriculteurs, éleveurs, sylviculteurs, bûcherons'},
 'ROME': {0: 'A1101', 1: 'A1201', 2: 'A1202', 3: 'A1203', 4: 'A1204'},
 '2010': {0: 2630, 1: 1380, 2: 4450, 3: 20330, 4: 130},
 '2011': {0: 2790, 1: 1500, 2: 3670, 3: 20040, 4: 90},
 '2012': {0: 2700, 1: 1320, 2: 4020, 3: 19130, 4: 130},
 '2013': {0: 2970, 1: 1690, 2: 3520, 3: 20500, 4: 140},
 '2014': {0: 2680, 1: 1980, 2: 2790, 3: 16900, 4: 150},
 '2015': {0: 2440, 1: 1780, 2: 2640, 3: 16310, 4: 170},
 '2016': {0: 3600, 1: 1980, 2: 2540, 3: 17680, 4: 90},
 '2017': {0: 2930, 1: 2470, 2: 2510, 3: 18520, 4: 130},
 '2018': {0: 2740, 1: 2010, 2: 2130, 3: 19280, 4: 150},
 '2019': {0: 1600.0, 1: 1760.0, 2: 1050.0, 3: 14260.0, 4: 80.0},
 '2020': {0: 11140, 1: 6490, 2: 14000, 3: 76570, 4: 510},
 '1e Trimestre 2021': {0: 600, 1: 560, 2: 300, 3: 6090, 4: 30}}

标签: pythonpandasdataframefunction

解决方案


你可以使用:

cols = df.filter(regex='^\d{4}$').columns
df = df.merge(Total_FAP, left_on='FAP', right_index=True, suffixes=('', '_total'))
df[cols].div(df['FAP_total'], axis=0)

输出:

       2010      2011      2012      2013      2014      2015      2016      2017      2018      2019      2020
0  0.021728  0.023050  0.022307  0.024537  0.022141  0.020159  0.029742  0.024207  0.022637  0.013219  0.092036
1  0.011401  0.012393  0.010905  0.013962  0.016358  0.014706  0.016358  0.020406  0.016606  0.014541  0.053619
2  0.036765  0.030321  0.033212  0.029081  0.023050  0.021811  0.020985  0.020737  0.017597  0.008675  0.115664
3  0.167961  0.165565  0.158047  0.169365  0.139623  0.134749  0.146067  0.153007  0.159286  0.117812  0.632601
4  0.001074  0.000744  0.001074  0.001157  0.001239  0.001404  0.000744  0.001074  0.001239  0.000661  0.004213

推荐阅读