我有一个数据框架,看起来像这样的
df1
v w x y
4 0 1 a b
5 0 1 a a
_________________
6 0 2 a b
_________________
2 0 3 a b
- - - - - - - - -
3 1 2 a b
_________________
15 1 3 a b
12 1 3 b b
_________________
13 1 1 a b
- - - - - - - - -
15 3 1 a b
14 3 1 b a
8 3 1 a b
9 3 1 a a
所以df1按v和w分组(线),并与包含x和y的另一个df合并。我需要一个新的列z,从x和y中选出正确的组,条件如下。
应该是这样的。
df1
v w x y z
4 0 1 a b a
5 0 1 a a a
_____________________
6 0 2 a b b
_____________________
2 0 3 a b a
- - - - - - - - - -- -
3 1 2 a b a
_____________________
15 1 3 a b b
12 1 3 b b b
_____________________
13 1 1 a b a
- - - - - - - - - -
15 3 1 a b a
14 3 1 b a b
8 3 1 a b a
9 3 1 a a a
所以基本上,在 "v "的子组中,一个组的最后一个字母和下一个组的第一个字母应该是不同的,这可以理解吗?
IIUC
df=df.reset_index(drop=True)
s=pd.DataFrame(np.sort(df[['x','y']],axis=1),index=df.index)[1].iloc[::-1].ne('b').cumsum()
df.groupby([df.v,df.w,s]).ngroup()
0 0
1 0
2 1
3 2
4 4
5 5
6 5
7 3
8 6
9 6
10 6
11 6
dtype: int64