更改列中的所有第一个值,从其他列分组

时间:2018-05-20 14:29:53

标签: python pandas dataframe group-by pandas-groupby

我有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 :(得分:3)

默认情况下,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

答案 1 :(得分:2)

如果每个组的第一个值不重复,您可以使用:

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

答案 2 :(得分:0)

您可以使用df._b获取np.unique中每个值的首次出现的索引:

df._b[np.unique(df._a, return_index=True)[1]] = 0