我是熊猫数据框的新手,我需要一些帮助。
假设我有一个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
实现这种目标的正确方法是什么?
答案 0 :(得分:4)
您可以通过Series.eq
列Score
与transform
和Series
创建的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