Pandas:根据分组聚合添加新列

4
我是一名 Pandas 数据框架的新手,需要一些帮助。
假设我有一个名为 df 的数据框架:
>>print(df)
        ID    Score       
0       AA      100       
1       AA       10        
2       BB       50 
3       BB      -20
4       BB        0
5       AA      200

我想添加一个值为1的新列,如果该ID的分数是最低的,则为1,否则为0:

>> print(df_out)
        ID    Score  IsLowestScoreID     
0       AA      100                0
1       AA       10                1
2       BB       50                0
3       BB      -20                1
4       BB        0                0
5       AA      200                0

如何正确地实现这样的事情?

1个回答

4
您可以使用Series.eq比较列Score和由transformmin创建的Series,然后将掩码转换为整数以进行True/False1/0的映射。
df['IsLowestScoreID'] = df['Score'].eq(df.groupby('ID')['Score'].transform('min')).astype(int)
print (df)
   ID  Score  IsLowestScoreID
0  AA    100                0
1  AA     10                1
2  BB     50                0
3  BB    -20                1
4  BB      0                0
5  AA    200                0

另一种选择是使用numpy.where来指定掩码值:

mask = df['Score'].eq(df.groupby('ID')['Score'].transform('min'))
df['IsLowestScoreID'] = np.where(mask, 1, 0)

细节:

print (df.groupby('ID')['Score'].transform('min'))
0    10
1    10
2   -20
3   -20
4   -20
5    10
Name: Score, dtype: int64

1
谢谢,我喜欢它。所以基本上就是 SQL 的方式 :) - Nakeuh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接