首页 > 解决方案 > 使用 pandas apply 来传递一行和整个数据框

问题描述

我有一个 df,我想用它创建一些新的 cols。我将如何使用 apply 函数来传递行和整个 df 呢?我需要整个 df 进行一些过滤,并且数据受每一行中的值的影响。

或者也许我不需要使用 apply,但这是我想到的第一件事。谢谢您,感谢您的所有帮助!

df的前:

+----+--------+--------+
| ID | Family | Amount |
+----+--------+--------+
|  1 | A      |      2 |
|  2 | A      |     10 |
|  3 | B      |      4 |
|  4 | B      |      7 |
+----+--------+--------+

结果:

+----+--------+--------+-----------+------------+
| ID | Family | Amount | Total_Fam | Id_Percent |
+----+--------+--------+-----------+------------+
|  1 | A      |      2 |        12 |       .166 |
|  2 | A      |     10 |        12 |       .833 |
|  3 | B      |      4 |        11 |       .363 |
|  4 | B      |      7 |        11 |       .636 |
+----+--------+--------+-----------+------------+

标签: pythonpandas

解决方案


先分组Family,再变换数量,然后可以直接除以Amount新列。

df['Total_Fam'] = df.groupby('Family')['Amount'].transform(np.sum)
df['Id_Percent'] = df['Amount']/df['Total_Fam']
df

在此处输入图像描述


推荐阅读