熊猫:根据组聚合添加新列

时间:2019-02-27 08:32:32

标签: python pandas

我是熊猫数据框的新手,我需要一些帮助。

假设我有一个DataFrame 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的最低分数,则返回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 个答案:

答案 0 :(得分:4)

您可以通过Series.eqScoretransformSeries创建的min进行比较,然后将True/False的掩码转换为整数1/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