每天,我都会使用不同的颜色。我需要创建一个新列,以查看每种颜色的用户与第一天的比例。
例如,对于蓝色,最早的日期是2020-01-01
,对应的'用户'值是100。因此,对于2020-01-02
,我想要的值应该是102/100 = 1.02
< / p>
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()
答案 0 :(得分:3)
sort
上Date
上的数据帧的值,然后是groupby
上的color
,并使用users
转换列first
,然后使用{ {1}}将Series.div
除以该转换后的列即可得到比率:
users
df['date'] = pd.to_datetime(df['date'])
df['ratio'] = df['users'].div(
df.sort_values('date').groupby('color')['users'].transform('first')
)