python-3.x - 如何根据另一列中的某些值创建新列
问题描述
对于每一天,我使用不同的颜色。我需要创建一个新列来查看每种颜色的用户与第一天的比率。
例如,对于蓝色,最早的日期是2020-01-01
,对应的“用户”值是 100。所以,对于2020-01-02
,我想要的值应该是102/100 = 1.02
raw_data = [
{'date': '2020-01-01', 'color': 'blue', 'users': 100},
{'date': '2020-01-02', 'color': 'blue', 'users': 102},
{'date': '2020-01-03', 'color': 'blue', 'users': 104},
{'date': '2020-01-04', 'color': 'blue', 'users': 98},
{'date': '2020-01-02', 'color': 'red', 'users': 100},
{'date': '2020-01-03', 'color': 'red', 'users': 107},
{'date': '2020-01-04', 'color': 'red', 'users': 114},
{'date': '2020-01-05', 'color': 'red', 'users': 150},
]
到目前为止,我知道我可以使用下面的代码获取每种颜色的最小日期,但不知道下一步该怎么做
grouped = df.groupby('color')['date']
min = grouped.min()
解决方案
sort
数据框的值Date
然后groupby
使用color
转换列,然后使用users
除以转换后的列以获得比率:first
Series.div
users
df['date'] = pd.to_datetime(df['date'])
df['ratio'] = df['users'].div(
df.sort_values('date').groupby('color')['users'].transform('first')
)
date color users ratio
0 2020-01-01 blue 100 1.00
1 2020-01-02 blue 102 1.02
2 2020-01-03 blue 104 1.04
3 2020-01-04 blue 98 0.98
4 2020-01-02 red 100 1.00
5 2020-01-03 red 107 1.07
6 2020-01-04 red 114 1.14
7 2020-01-05 red 150 1.50
推荐阅读
- java - 如何覆盖子类中的父类方法,使其返回类型为子类
- ios - 在 UIRepresentableView 和 SwiftUI 的 View 之间设置独占触摸
- node.js - 开玩笑未能相等的枚举值
- python - 部署干草堆模型/工作流程
- http-status-code-404 - 当 tile 为 404 时,openlayers 会放大前一个 tile 图像而不是隐藏它
- python - 通过 k 聚类处理 Iris 数据集
- python - VS Code 中的 Pylance 使用 import * 报告未定义的变量
- java - 打印具有唯一 K 个不同元素的所有子数组
- java - 在 java 中为 MySQL 连接工作。为什么我收到 java.lang.IndexOutOfBoundsException 错误?
- c# - 为什么 dotnet 在 .NET Framework 4.5 项目上构建会抛出“此项目引用了缺失的 NuGet 包”?