我后面有一个数据框
A B
0 0 0
1 0 0
2 0 0
3 1 0
4 0 0
5 0 0
6 0 0
7 0 1
8 1 1
9 1 1
10 0 1
11 0 1
12 0 1
13 1 1
14 0 2
15 0 2
16 0 2
17 1 2
18 0 2
19 1 2
20 1 2
并且我想使“ C”成为每个组“ B”的A的第一个值的标记
A B C
0 0 0 0
1 0 0 0
2 0 0 0
3 1 0 1
4 0 0 0
5 0 0 0
6 0 0 0
7 0 1 0
8 1 1 1
9 1 1 0
10 0 1 0
11 0 1 0
12 0 1 0
13 1 1 0
14 0 2 0
15 0 2 0
16 0 2 0
17 1 2 1
18 0 2 0
19 1 2 0
20 1 2 0
我不知道要这样做 我尝试了groupby方法,但未能将它们放在新列中
答案 0 :(得分:0)
尝试使用groupby
和transform
和np.where
:
df['C'] = df.groupby('B')['A'].transform(lambda x: np.where(x.duplicated(), 0, x))
现在:
print(df)
是:
A B C
0 0 0 0
1 0 0 0
2 0 0 0
3 1 0 1
4 0 0 0
5 0 0 0
6 0 0 0
7 0 1 0
8 1 1 1
9 1 1 0
10 0 1 0
11 0 1 0
12 0 1 0
13 1 1 0
14 0 2 0
15 0 2 0
16 0 2 0
17 1 2 1
18 0 2 0
19 1 2 0
20 1 2 0
答案 1 :(得分:0)
这里groupby
不是必需的,因为可以使用DataFrame.duplicated
测试每列的重复值,并通过numpy.where
创建新列:
df['C'] = np.where(df.duplicated(['A','B']), 0, df['A'])
print (df)
A B C
0 0 0 0
1 0 0 0
2 0 0 0
3 1 0 1
4 0 0 0
5 0 0 0
6 0 0 0
7 0 1 0
8 1 1 1
9 1 1 0
10 0 1 0
11 0 1 0
12 0 1 0
13 1 1 0
14 0 2 0
15 0 2 0
16 0 2 0
17 1 2 1
18 0 2 0
19 1 2 0
20 1 2 0