如何在df中将值相关分数的起始分数设置为100

How to set the starting scores of value related scores to 100 in df

这是一个非常简单的问题,但我无法使用术语 'normalize' 或过度使用的术语 'index' 找到它。如何将我所有 'cars' 的起始值设置为 100?实际上有 52 辆车和更多的时间戳。

import pandas as pd

ExampleOfWhatIHave = {'Car':['A', 'B', 'A', 'B'],
                      'Hour':['1', '1', '2', '2'],
                      'Car-speed':[10, 20, 11, 19]}

ExampleOfWhatINeed = {'Car':['A', 'B', 'A', 'B'],
                      'Hour':['1', '1', '2', '2'],
                      'Car51-speed':[100, 100, 110, 95]}
# Create DataFrame
df = pd.DataFrame(ExampleOfWhatIHave)
df = pd.DataFrame(ExampleOfWhatINeed)

这个漂亮的衬垫怎么样?

df['Car51-speed'] = 100 * df['Car-speed'] / df.groupby('Car')['Car-speed'].transform('first')

这是对 Quixotic22 的回答的解释,因为它比写在评论中更容易

从分母开始

df.groupby('Car') 按 car 列上的值对数据框进行分组,然后 .transform('first') 为每个组选择第一个值,因此 df_1.groupby('Car').transform('first')

给出:

  Hour  Car-speed  Car51-speed
0    1         10        100.0
1    1         20        100.0
2    1         10        100.0
3    1         20        100.0

添加 ['Car-speed'] 仅选择该列作为 pandas 系列

df_1.groupby('Car')['Car-speed'].transform('first') 因此给出:

0    10
1    20
2    10
3    20
Name: Car-speed, dtype: int64

在分子上我们有 100 * df_1['Car-speed']

这只是作为一个系列的 'Car-speed' 列乘以值 100,得到:

0    1000
1    2000
2    1100
3    1900
Name: Car-speed, dtype: int64

我们将这些 Series 划分为一个 Series,其中每个值都是该索引处的值相除的结果

0    100.0
1    100.0
2    110.0
3     95.0
Name: Car-speed, dtype: float64

此结果系列设置为创建新列的数据框的 'Car51-speed' 列

输出:

  Car Hour  Car-speed  Car51-speed
0   A    1         10        100.0
1   B    1         20        100.0
2   A    2         11        110.0
3   B    2         19         95.0