首页 > 解决方案 > 在数据框中创建新列

问题描述

我有一个包含以下列的数据框:

date    count_e
03/08/2019  31
03/08/2019  31
04/08/2019  47
04/08/2019  47
04/08/2019  47
04/08/2019  47
04/08/2019  47
04/08/2019  47
05/08/2019  30
05/08/2019  30
05/08/2019  30
05/08/2019  30
05/08/2019  30
05/08/2019  30
05/08/2019  30
05/08/2019  30
05/08/2019  30
06/08/2019  44
06/08/2019  44
06/08/2019  44

我想创建一个新列“a_count”,该列将根据每个日期的count_e/(数据帧中存在的实际日期计数)计数的约束生成。

例如 :

预期输出:

date      count_e     a_count
    03/08/2019  31        31/2
    03/08/2019  31        31/2
    04/08/2019  47        47/6 (Since actual count of date in dataframe is 6)
    04/08/2019  47        47/6
    04/08/2019  47        47/6
    04/08/2019  47        47/6
    04/08/2019  47         .
    04/08/2019  47         .
    05/08/2019  30         30/9
    05/08/2019  30
    05/08/2019  30
    05/08/2019  30
    05/08/2019  30
    05/08/2019  30
    05/08/2019  30
    05/08/2019  30
    05/08/2019  30
    06/08/2019  44
    06/08/2019  44
    06/08/2019  44

任何人都可以帮助实现同样的目标。

谢谢

标签: pythonpandasnumpy

解决方案


使用groupbytransform

df["a_count"] = df["count_e"].div(df.groupby("date")["count_e"].transform('count'))

print (df)

#
          date  count_e    a_count
0   03/08/2019       31  15.500000
1   03/08/2019       31  15.500000
2   04/08/2019       47   7.833333
3   04/08/2019       47   7.833333
4   04/08/2019       47   7.833333
5   04/08/2019       47   7.833333
6   04/08/2019       47   7.833333
7   04/08/2019       47   7.833333
8   05/08/2019       30   3.333333
9   05/08/2019       30   3.333333
10  05/08/2019       30   3.333333
11  05/08/2019       30   3.333333
12  05/08/2019       30   3.333333
13  05/08/2019       30   3.333333
14  05/08/2019       30   3.333333
15  05/08/2019       30   3.333333
16  05/08/2019       30   3.333333
17  06/08/2019       44  14.666667
18  06/08/2019       44  14.666667
19  06/08/2019       44  14.666667

推荐阅读