我的 df
数据帧索引如下所示:
Com_Lag_01
Com_Lag_02
Com_Lag_03
Com_Lag_04
Com_Lag_05
Com_Lag_06
Com_Lag_07
Com_Lag_08
Com_Lag_09
Com_Lag_10
Com_Lag_101
Com_Lag_102
Com_Lag_103
...
Com_Lag_11
Com_Lag_111
Com_Lag_112
Com_Lag_113
Com_Lag_114
...
Com_Lag_12
Com_Lag_120
...
Com_Lag_13
Com_Lag_14
Com_Lag_15
我想对这个索引进行排序,以便数字从Com_Lag_1
到Com_Lag_120
。如果我使用 df.sort_index(),
我会得到与上面相同的内容。关于如何正确排序此索引的任何建议?
另一个解决方案是
df.sort_index(key=lambda x: (x.to_series().str[8:].astype(int)), inplace=True)
8来自数值开始的位置
没有新列的解决方案,数据帧按
排序系列
的索引重新索引
:
a = df.index.to_series().str.rsplit('_').str[-1].astype(int).sort_values()
print (a)
Com_Lag_1 1
Com_Lag_3 3
Com_Lag_5 5
Com_Lag_12 12
Com_Lag_24 24
dtype: int32
df = df.reindex(index=a.index)
print (df)
Age Year
Com_Lag_1 27 1991
Com_Lag_3 22 2001
Com_Lag_5 31 1997
Com_Lag_12 25 2004
Com_Lag_24 34 2009
但是,如果需要重复的值,请添加新列:
df = pd.DataFrame(\
{'Year': [1991 ,2004 ,2001 ,2009 ,1997],\
'Age': [27 ,25 ,22 ,34 ,31],\
},\
index = ['Com_Lag_1' ,'Com_Lag_12' ,'Com_Lag_3' ,'Com_Lag_24' ,'Com_Lag_12'])
print (df)
Age Year
Com_Lag_1 27 1991
Com_Lag_12 25 2004
Com_Lag_3 22 2001
Com_Lag_24 34 2009
Com_Lag_12 31 1997
df['indexNumber'] = df.index.str.rsplit('_').str[-1].astype(int)
df = df.sort_values(['indexNumber']).drop('indexNumber', axis=1)
print (df)
Age Year
Com_Lag_1 27 1991
Com_Lag_3 22 2001
Com_Lag_12 25 2004
Com_Lag_12 31 1997
Com_Lag_24 34 2009
可以尝试这样的事情,通过对索引的编号版本执行排序
import pandas as pd
# Create a DataFrame example
df = pd.DataFrame(\
{'Year': [1991 ,2004 ,2001 ,2009 ,1997],\
'Age': [27 ,25 ,22 ,34 ,31],\
},\
index = ['Com_Lag_1' ,'Com_Lag_12' ,'Com_Lag_3' ,'Com_Lag_24' ,'Com_Lag_5'])
# Add of a column containing a numbered version of the index
df['indexNumber'] = [int(i.split('_')[-1]) for i in df.index]
# Perform sort of the rows
df.sort(['indexNumber'], ascending = [True], inplace = True)
# Deletion of the added column
df.drop('indexNumber', 1, inplace = True)
编辑2017-V1:
若要避免设置WithCopyWarning:
df = df.assign(indexNumber=[int(i.split('_')[-1]) for i in df.index])
编辑2017 -熊猫V2 0 . 21 . 0版
import pandas as pd
print(pd.__version__)
# Create a DataFrame example
df = pd.DataFrame(\
{'Year': [1991 ,2004 ,2001 ,2009 ,1997],\
'Age': [27 ,25 ,22 ,34 ,31],\
},\
index = ['Com_Lag_1' ,'Com_Lag_12' ,'Com_Lag_3' ,'Com_Lag_24' ,'Com_Lag_5'])
df.reindex(index=df.index.to_series().str.rsplit('_').str[-1].astype(int).sort_values().index)
我有字符串数组:15MB、12MB、1TB、1GB。我想通过遵循MB小于GB和TB的规则来对它们进行词典比较。所以最后我想得到:12MB,15MB,1GB,1TB。我找到了一个比较字母的方法: 我在考虑用数字和字母拆分字符串,但我如何用字母“MB”对它们进行排序。然后根据他们的数字。我是使用两个比较器还是其他什么?
问题内容: 有一些值,例如AB,A012B,CD,1、10、01、9我必须对其进行排序,输出的输出应为01、1、9、10,A012B,AB,CD可以使用任何试图使用collection的collection .sort函数,但将所有内容都视为字符串并像01,1,10,9,A012B,AB,CD一样打印,这不是我的要求…请帮助 问题答案: //捕鱼技术 //不够??? //这是鱼
问题内容: 我有一个带有文件名的字符串列表: 输出: 但是我想要: 有没有简单的方法可以做到这一点? 问题答案: 是: 说明:字符串按词法排序,因此在字符串之前(因为< ,因此忽略第一个字符串之后的内容)。因此,我们使用的参数是一个回调函数,该函数接受一个列表项并返回用于对该项目进行排序的值- 在您的情况下,是从文件名的第一部分构建的整数。这样,列表就可以正确地按数值排序。
我正在使用以下模式从外部源加载数据帧: 现在,我需要添加新列METADATA_PARSED,其中包含列类型数组和以下case类: case类META_DATA_COL(M_1: String,M_2: String,M_3,M_10: String) 基于示例,我这里的方法是创建一个UDF并传递元数据列。但是由于它是一个复杂的类型,我在解析它时遇到了很多困难。 除此之外,对于UDF中的“new”变
我有这个字符串列表 我想根据其中的数字对这个列表进行排序。 例如,如果我有,我希望它像一样排序。 我使用了,但它返回类似的内容。 我应该怎么做才能把它按正确的顺序排列?
问题内容: 我有一个数组 并且需要对其进行排序,使其看起来像; 我尝试了排序功能; 但这给出了命令 我试图考虑一个正则表达式可以正常工作,但无法解决这个问题。 如果有帮助,格式将始终为2个字母,x个数字,然后是任意数量的字符。 问题答案: 这称为“自然排序”,可以像这样在JS中实现: 要以相反的顺序排序,只需交换参数即可: 或简单地