Здесь значения не являются счетчиками на группы, поэтому решение следует упростить, пропустив groupby
, для правильных выровненных значений необходимо преобразовать вывод в массив numpy:
m = df['group'] == 1
df.loc[m ,['sum','txn']] = (df.loc[m, ['value','count']] + 1).to_numpy()
#oldier pandas versions
#df.loc[m ,['sum','txn']] = (df.loc[m, ['value','count']] + 1).values
print (df)
channel sum txn value count group
0 A 3.0 2.0 2 1 1
1 A 4.0 4.0 3 3 1
2 B NaN NaN 4 4 2
3 C NaN NaN 2 2 2
4 A 2.0 6.0 1 5 1
РЕДАКТИРОВАТЬ: Для нормализации по группы можно использовать GroupBy.transform
:
m = df['group'] == 1
df.loc[m ,['sum','txn']] = (df[m].groupby('channel')['value','count']
.transform(lambda x: x - x.max() / x.max() - x.min())
.to_numpy())
print (df)
channel sum txn value count group
0 A 0.0 -1.0 2 1 1
1 A 1.0 1.0 3 3 1
2 B NaN NaN 4 4 2
3 C NaN NaN 2 2 2
4 A -1.0 3.0 1 5 1