Как назначить фрейм данных индекса c со значением фрейма данных с таким же индексом - PullRequest
1 голос
/ 25 февраля 2020

Допустим, у меня есть

    | channel |   sum   |  txn  | value | count | group
0   |    A    |  null   |  null |   2   |   1   |  1
1   |    A    |  null   |  null |   3   |   3   |  1 
2   |    B    |  null   |  null |   4   |   4   |  2
3   |    C    |  null   |  null |   2   |   2   |  2
4   |    A    |  null   |  null |   1   |   5   |  1

Когда я использую

df.loc[df['group'] == 1 ,['sum','txn']] = df.loc[df['group'] == 1].groupby(['channel'])['value','count'].apply(lambda x: x+1)

, он не присваивает значение моему фрейму данных

it должно быть что-то похожее на это

    | channel |   sum   |  txn  | value | count | group
0   |    A    |    3    |   2   |   2   |   1   |  1
1   |    A    |    4    |   4   |   3   |   3   |  1 
2   |    B    |  null   |  null |   4   |   4   |  2
3   |    C    |  null   |  null |   2   |   2   |  2
4   |    A    |    2    |   6   |   1   |   5   |  1

1 Ответ

2 голосов
/ 25 февраля 2020

Здесь значения не являются счетчиками на группы, поэтому решение следует упростить, пропустив 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...