2024-09-30 04:37:49 发布
网友
考虑一下df
df
df = pd.DataFrame(dict(A=list('babbaa'), B=list('zxyxzy'))) df
我想用B定义的组对A进行排序。但我不希望A的位置改变。你知道吗
B
A
如果我尝试:
df.groupby('A', sort=False) \ .apply(pd.DataFrame.sort_values, by='B') \ .reset_index(drop=True)
您会注意到A被分组在一起。我想要这个:
这是我想到的
df = pd.DataFrame(dict(A=list('babbaa'), B=list('zxyxzy'))) A, B = df.A.values, df.B.values
使用^{}逆(所有相对位置的索引值)。你知道吗
u, iv = np.unique(A, return_inverse=True)
使用反向和广播为每个组创建一行,其中每行都是该组的布尔掩码。你知道吗
is_ = np.arange(len(u))[:, None] == iv
循环行并用更新的值重新分配位置跟踪数组i。你知道吗
i
i = np.arange(len(df)) for r in is_: i[r] = i[r][df.B.values[r].argsort()]
使用新位置值
df.iloc[i]
目前,我不知道如何摆脱这个循环。你知道吗
举个人为的例子:
对A和B进行排序,让A取索引。稍后,重置索引以生成引用DF。你知道吗
DF
A = df.sort_values(['A', 'B']).set_index('A').reset_index()
接下来,使用append将A与普通整数索引一起设置为索引。对索引进行排序(属于索引)。现在再次重置索引。你知道吗
append
B = df.set_index('A', append=True).sort_index(level=1).reset_index(level=1)
让A采用B的指数。对获取的索引轴进行排序。你知道吗
A.index = B.index A.sort_index()
这是我想到的
使用^{} 逆(所有相对位置的索引值)。你知道吗
使用反向和广播为每个组创建一行,其中每行都是该组的布尔掩码。你知道吗
循环行并用更新的值重新分配位置跟踪数组
i
。你知道吗使用新位置值
目前,我不知道如何摆脱这个循环。你知道吗
举个人为的例子:
对A和B进行排序,让A取索引。稍后,重置索引以生成引用
DF
。你知道吗接下来,使用
append
将A与普通整数索引一起设置为索引。对索引进行排序(属于索引)。现在再次重置索引。你知道吗让A采用B的指数。对获取的索引轴进行排序。你知道吗
相关问题 更多 >
编程相关推荐