gpt4 book ai didi

python - 在 Python 中对 csv 进行排序 - 使用字符串分隔符拆分第一列,然后通过第二个元素排序,然后通过第一个元素排序

转载 作者:行者123 更新时间:2023-12-02 17:56:54 26 4
gpt4 key购买 nike

假设我有一个 csv,例如:

Field1,Field2,Field3,Field4
bitter-banana,yellow,1,10
tasty-banana,green,1,7
bad-banana,yellow,2,11
tasty-apple,green,10,5
bad-apple,red,9,4
bitter-apple,green,1,7

如何仅对第一列上的 csv 进行排序,其中 - 分隔符之后的字符串部分首先按字母顺序排序。然后,那些在 - 之后相同的字符串将按照 - 分隔符之前的字符串的字母顺序分组排序。

输出为:

Field1,Field2,Field3,Field4
bad-apple,red,9,4
bitter-apple,green,1,7
tasty-apple,green,10,5
bad-banana,yellow,2,11
bitter-banana,yellow,1,10
tasty-banana,green,1,7

我可以使用 Pandas sort_values 来满足第一个排序要求,例如:

df = df.sort_values(by=["Field1"], key=lambda x: x.str.split("-").str[1], ascending=True)

但我不知道如何解决我的问题的第二个要求。

最佳答案

或者,拆分、反转元素、连接并按该键排序:

df.sort_values('Field1', key=lambda x: x.str.split('-').str[::-1].str.join('-'))

输出:

          Field1  Field2  Field3  Field4
4 bad-apple red 9 4
5 bitter-apple green 1 7
3 tasty-apple green 10 5
2 bad-banana yellow 2 11
0 bitter-banana yellow 1 10
1 tasty-banana green 1 7

注意:奇怪的是,这似乎比 split 和 sort_values 性能稍好一些:

%timeit df.sort_values('Field1', key=lambda x: x.str.split('-').str[::-1].str.join('-'))

771 µs ± 15.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loopseach)

%timeit df.loc[df['Field1'].str.split('-', expand=True).sort_values([1, 0]).index]

1.39 ms ± 24.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

您必须在真实数据或更大的数据集上进行测试,看看哪个表现更好。

关于python - 在 Python 中对 csv 进行排序 - 使用字符串分隔符拆分第一列,然后通过第二个元素排序,然后通过第一个元素排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75455272/

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