Изменить все первые значения в столбце, сгруппированные из другого столбца - PullRequest
0 голосов
/ 20 мая 2018

У меня есть 2 столбца - _a, _b.

import numpy as np 
import pandas as pd
df = pd.DataFrame({'_a':[1,1,1,2,2,3,3],'_b':[3,4,5,3,3,3,9]})
df

    _a  _b
0   1   3
1   1   4
2   1   5
3   2   3
4   2   3
5   3   3
6   3   9

Мне нужно изменить первое значение в столбце _b на 0, сгруппированное по столбцу _a Как здесь:

    _a  _b
0   1   0
1   1   4
2   1   5
3   2   0
4   2   3
5   3   0
6   3   9

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 20 мая 2018

Вы можете получить индексы первых появлений для каждого значения в df._b с помощью np.unique:

df._b[np.unique(df._a, return_index=True)[1]] = 0
0 голосов
/ 20 мая 2018

Если первые значения каждой группы не являются дубликатами, вы можете использовать это:

df.loc[df.groupby('_a').head(1).index, '_b'] = 0

вывод:

        _a  _b
    0   1   0
    1   1   4
    2   1   5
    3   2   0
    4   2   3
    5   3   0
    6   3   9
0 голосов
/ 20 мая 2018

По умолчанию pd.Series.duplicated возвращает значение False для первого элемента.Используя это, вы можете сделать:

df.loc[~df['_a'].duplicated(), '_b'] = 0

df
Out: 
   _a  _b
0   1   0
1   1   4
2   1   5
3   2   0
4   2   3
5   3   0
6   3   9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...