为每个唯一 ID 分配相同的值

Assign same value for every unique ID

我有一个 Pandas 数据框,看起来像这样。

Customer ID  Customer Name   Price_Val      ID_value
5015            AXN           17.12            2
5015            AXN           2.08             4
5015            AXN           3.45             3
7315            BXN           2.22             0
7315            BXN           8.46             2
3283            CXN           88               0
3283            CXN           0.46             2
3283            CXN           6.46             4

每个唯一客户都应该有相同的 ID_value。但是从数据框中您可以看到我们有不同的 ID_Value 用于唯一客户 ID。

我们以客户ID 5015为例。

Customer ID  Customer Name   Price_Val      ID_value
5015            AXN           17.12            2
5015            AXN           2.08             4
5015            AXN           3.45             3

对于 5015,您可以看到我们有三个不同的 ID_value。对于所有三个记录,我们需要相同的 ID_value。要确定 ID_value,我们需要从三个记录中找到 最大值 ID_value,并将其分配给 5015 的所有记录作为 ID_value。

对于 5015 客户 ID,最大值 ID_value 将为 4,因此我们需要将 5015 的其他 ID_value 更改为 4。

转换后这是 5015 客户 ID 的样子。

Customer ID  Customer Name   Price_Val      ID_value
5015            AXN           17.12            4
5015            AXN           2.08             4
5015            AXN           3.45             4

对于 7315 Max ID_value 是 2 所以我们需要将该值分配给 7315

的所有 ID_value
7315            BXN           2.22             2
7315            BXN           8.46             2

我需要为每个唯一的客户 ID 执行此操作。我有 800 个不同的唯一客户 id.What 最有效的方法是什么?

使用transform:

df['ID_value'] = df.groupby('Customer ID')['ID_value'].transform('max')
print(df)

# Output:
   Customer ID Customer Name  Price_Val  ID_value
0         5015           AXN      17.12         4
1         5015           AXN       2.08         4
2         5015           AXN       3.45         4
3         7315           BXN       2.22         2
4         7315           BXN       8.46         2
5         3283           CXN      88.00         4
6         3283           CXN       0.46         4
7         3283           CXN       6.46         4

对于这种特定情况,您应该使用 pandas 中的 transform 函数,因为它将保留原始数据帧并在一行代码中完成。

df['ID_value'] = df.groupby('Customer ID')['ID_value'].transform('max')