我有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
提前谢谢。
答案 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