gpt4 book ai didi

python - 根据 Pandas 数据框中的 2 列对多列进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:31 25 4
gpt4 key购买 nike

我有一个包含多个字母值的数据框,我想对其进行排序。例如

ii     A.1     A.2      B.1     B.2
1 Xy foo Ly bar
2 Ab bar Ko foo

所以我想根据 A.1B.1 对每一行进行排序,并对 A.2 重新排序code>B.2 按照那个顺序。这将变成:

ii     s1      s2       b1      b2
1 Ly bar Xy foo
2 Ab bar Ko foo

我正在尝试使用 df.apply(lambda x: x.sort_values())。但是,我在更改附加列(A.2B.2)的顺序时遇到问题。你会怎么做?

编辑: 澄清一下,我需要根据 sorted 指定的顺序对 A.2 B.2 进行排序A.1B.1。例如:

ii     A.1     A.2      B.1     B.2
1 Xy mat Ly bar
2 Ab zul Ko foo #shouldn't change

变成:

ii     A.1     A.2      B.1     B.2
1 Ly bar Xy mat
2 Ab zul Ko foo #notice, this is unchanged because A.1 B.1 are already sorted

最佳答案

我相信需要numpy.argsort通过排序数组获取位置,然后通过 arr 中的索引获取值并分配回来:

arr = df[['A.1', 'B.1']].values.argsort()
print (arr)
[[1 0]
[0 1]]

df[['A.1', 'B.1']] = df[['A.1', 'B.1']].values[np.arange(len(arr))[:,None], arr]
df[['A.2', 'B.2']] = df[['A.2', 'B.2']].values[np.arange(len(arr))[:,None], arr]
print (df)
ii A.1 A.2 B.1 B.2
0 1 Ly bar Xy foo
1 2 Ab bar Ko foo

有了新数据:

print (df)
ii A.1 A.2 B.1 B.2
0 1 Ly bar Xy mat
1 2 Ab zul Ko foo

关于python - 根据 Pandas 数据框中的 2 列对多列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49980394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com