我有一个包含两个组指示器的数据框:cat1 和 cat2。我想标记 cat2 在 cat1 中第一次出现的情况。
我有:
df = pd.DataFrame([['a','x'],['a','x'],['a','y'],['a','y'],['b','y'],['b','z'],['c','z']], columns = ['cat1', 'cat2'])
cat1 cat2
0 a x
1 a x
2 a y
3 a y
4 b y
5 b z
6 c z
我想获得什么:
cat1 cat2 flag
0 a x 1
1 a x 1
2 a y 0
3 a y 0
4 b y 1
5 b z 0
6 c z 1
我尝试过各种版本的分组滚动计数,但未能获得所需的结果。
谢谢!!!
最佳答案
您可以对“cat1”进行groupby
,然后调用transform
,它会应用一个lambda
,将“cat2”的值与第一个值进行比较value,这将产生一个 bool 数组,然后我们可以使用 astype
将其转换为 int
:
In [166]:
df['flag'] = df.groupby('cat1')['cat2'].transform(lambda x: x== x.iloc[0]).astype(int)
df
Out[166]:
cat1 cat2 flag
0 a x 1
1 a x 1
2 a y 0
3 a y 0
4 b y 1
5 b z 0
6 c z 1
在这里您可以看到 bool 输出:
In [167]:
df.groupby('cat1')['cat2'].transform(lambda x: x== x.iloc[0])
Out[167]:
0 True
1 True
2 False
3 False
4 True
5 False
6 True
Name: cat2, dtype: object
另一种方法是调用first
比较中:
In [169]:
df['flag'] = (df['cat2'] == df.groupby('cat1')['cat2'].transform('first')).astype(int)
df
Out[169]:
cat1 cat2 flag
0 a x 1
1 a x 1
2 a y 0
3 a y 0
4 b y 1
5 b z 0
6 c z 1
关于python - 在 Pandas 中标记组内的第一个类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42676010/