开发者问题收集

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

2018-05-20
72

我有 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个回答

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

如果每组的第一个值不重复,则可以使用以下命令:

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
cfort
2018-05-20

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

df._b[np.unique(df._a, return_index=True)[1]] = 0
hilberts_drinking_problem
2018-05-20