Создать маску и разделить отфильтрованные строки на количество True
s значений на sum
:
mask = df.Price == 10000
df.loc[mask, 'Price'] /= mask.sum()
#same like
#df.loc[mask, 'Price'] = df.loc[mask, 'Price'] / mask.sum()
print (df)
ID Unit_ID Price
0 1 1 50.0
1 2 2 40.0
2 3 1 2500.0
3 3 2 2500.0
4 3 3 2500.0
5 3 4 2500.0
Если вы хотите разделить все значения по их количеству:
df['Price'] /= df.groupby(by="Price")['Price'].transform('size')
РЕДАКТИРОВАТЬ:
df['Price'] /= df.groupby(by=["ID", "Price"])['Price'].transform('size')
print (df)
ID Unit_ID Price
0 1 1 50.0
1 2 2 40.0
2 3 1 2500.0
3 3 2 2500.0
4 3 3 2500.0
5 3 4 2500.0
6 6 1 10000.0
7 8 3 10000.0