我试图排序列的. csv文件。这些是列的名称和顺序:
'Unnamed: 0', 'Unnamed: 1',
'25Mg BLK', '25Mg 1', '25Mg 2',
'44Ca BLK', '44Ca 1', '44Ca 2',
'137Ba BLK', '137Ba 1', '137Ba 2',
'25Mg 3', '25Mg 4', '25Mg 5',
'44Ca 3', '44Ca 4', 44Ca 5',
'137Ba 3', '137Ba 4', '137Ba 5',
这是我想要的订单:
'Unnamed: 0', 'Unnamed: 1',
'25Mg BLK', '25Mg 1', '25Mg 2', '25Mg 3', '25Mg 4', '25Mg 5',
'44Ca BLK', '44Ca 1', '44Ca 2', '44Ca 3', '44Ca 4', 44Ca 5',
'137Ba BLK', '137Ba 1', '137Ba 2', '137Ba 3', '137Ba 4', '137Ba 5',
当前我的代码如下所示:
import pandas as pd
df = pd.read_csv("real_data.csv", header=2)
df2 = df.reindex_axis(sorted(df.columns), axis=1)
print(df2)
df2.to_csv("sorted.csv")
使用我当前的代码,我得到以下列顺序的结果:
'137Ba 1', '137Ba 2', '137Ba 3', '137Ba 4', '137Ba 5', '137Ba BLK',
'25Mg 1', '25Mg 2', '25Mg 3', '25Mg 4', '25Mg 5', '25Mg BLK',
'44Ca 1', '44Ca 2', '44Ca 3', '44Ca 4', '44Ca 5', '44Ca BLK'
所以我已经想出了我必须传递一个函数给排序函数来指定我希望它如何排序,但是我找不到一个函数来做这件事。
非常感谢您的任何意见!
from natsort import natsorted, ns
l1=list(map(lambda x: x.replace('BLK', '0000000'), l1))
l1=natsorted(l1)
l1=list(map(lambda x: x.replace('0000000', 'BLK'), l1))
l1
Out[1125]:
['25Mg BLK',
'25Mg 1',
'25Mg 2',
'25Mg 3',
'25Mg 4',
'25Mg 5',
'44Ca BLK',
'44Ca 1',
'44Ca 2',
'44Ca 3',
'44Ca 4',
'44Ca 5',
'137Ba BLK',
'137Ba 1',
'137Ba 2',
'137Ba 3',
'137Ba 4',
'137Ba 5']
然后做df.reindex(l1)
请看下面的答案:https://stackoverflow.com/a/33555435/8239103 它似乎做了你想做的事。为了清楚起见,我将在这里发布代码。
sequence = [Your sequence as a list as above]
your_dataframe = your_dataframe.reindex(columns=sequence)
使用helperDataFrame
,对列进行排序,然后通过a.index
重新编制索引:
c = df.columns
a = c[2:].to_series().str.extract('(\d+)([a-zA-Z]+)\s+(\d*)', expand=True)
#convert ints
a[0] = a[0].astype(int)
#convert to floats, non exis numbers generate NaNs
a[2] = pd.to_numeric(a[2], errors='coerce')
a = a.sort_values([0,1,2], na_position='first')
print (a)
0 1 2
25Mg BLK 25 Mg NaN
25Mg 1 25 Mg 1.0
25Mg 2 25 Mg 2.0
25Mg 3 25 Mg 3.0
25Mg 4 25 Mg 4.0
25Mg 5 25 Mg 5.0
44Ca BLK 44 Ca NaN
44Ca 1 44 Ca 1.0
44Ca 2 44 Ca 2.0
44Ca 3 44 Ca 3.0
44Ca 4 44 Ca 4.0
44Ca 5 44 Ca 5.0
137Ba BLK 137 Ba NaN
137Ba 1 137 Ba 1.0
137Ba 2 137 Ba 2.0
137Ba 3 137 Ba 3.0
137Ba 4 137 Ba 4.0
137Ba 5 137 Ba 5.0
df = df.reindex_axis(c[:2].tolist() + a.index.tolist(), axis=1)
print (df)
问题内容: 我有这个清单 但是现在我希望列表按以下方式排序: 如您所见,无论每个数字具有什么符号,我都希望从高到低排序,但是保持符号清晰吗? 问题答案: 使用的关键功能或:
问题内容: 仍在学习python(最后!),还不能完全绕过这个问题。我想做的是使用列表中的第三项按值对列表字典进行排序。当值只是一个数字或字符串时,按值对字典排序很容易,但是这个列表让我感到困惑。 例: 我希望能够按每个列表中第三个值的顺序遍历字典,在这种情况下为9、3、11。 非常感谢您的帮助! 问题答案: 这是执行此操作的一种方法: 该参数的的功能,可以让您导出列表中的每个元素的排序键。 要遍
本文向大家介绍Python对字符串列表进行排序,包括了Python对字符串列表进行排序的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将看到如何对字符串列表进行排序。我们将使用sort方法和sorted函数对给定的字符串列表进行排序。然后,我们将了解如何根据不同的条件(例如长度,值等)对字符串列表进行排序, 让我们看看如何使用list.sort方法对字符串列表进行排序。排序方法列表是一个
问题内容: 从经验上讲,似乎Python的默认列表排序器在传递元组列表时将按每个元组中的第一个元素进行排序。那是对的吗?如果不是,按元组的第一个元素对元组列表进行排序的正确方法是什么? 问题答案: 它会自动按元组中的第一个元素对元组列表进行排序,然后按第二个元素进行排序,依此类推,tuple([1,2,3])将排在tuple([1,2,4])之前。如果要覆盖此行为,请将一个callable作为第二
问题内容: Python通过按顺序查看元组的元素来对元组列表进行排序。由于集合是无序的,Python如何对集合列表进行排序? 编辑:帖子中的问题和可接受的答案较为笼统,给出的文件也很深入。我的问题不是重复的。 问题答案: 无论列表中有什么内容,元素的方法都是唯一参考的比较方法。对于集合,意味着“是”的适当子集,不足以定义总顺序。这就是为什么结果通常是不确定的。可能是原始列表的任何排列,与实现恰好适
问题内容: 这个问题已经在这里有了答案 : 如何根据对象的属性对对象列表进行排序? (8个答案) 1年前关闭。 我有一个看起来像这样的对象列表。 Card(10,’H)在这里不是元组,而是对象。我知道如果列表中的每个项目都是元组形式的,如何对列表进行排序,就像这样, 但我不知道如何对对象列表进行排序。我想按第一个输入值(即Card()中的数字)对列表进行排序 我怎样才能做到这一点? 编辑:这是Ca