python - 在数据框中创建新列
问题描述
我有一个包含以下列的数据框:
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
任何人都可以帮助实现同样的目标。
谢谢
解决方案
使用groupby
和transform
:
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
推荐阅读
- python - 机器人发送大量消息 - Discord.Py
- c# - 将带有 LEFT JOIN 的 SQL 转换为 Linq(方法语法)
- python - 数据类的 IntEnum 属性的正确类型提示?
- reporting-services - Microsoft Reporting Services -- 如何将毫秒转换为 dd:mm:ss 格式
- swift - 如何实现这个 UICollectionView 单元格动画?
- vue.js - 错误页面在 Nuxt.js 的生产模式下不起作用
- azure - 使用 dt.exe 命令行迁移 Cosmosdb
- android - 使用外部存储写入 Android 11 上多个应用程序使用的文件
- java - java.net.URL 检索到无法理解的流
- java - 没有参数的Java 8构造函数