如何根据特定列中的值对数据文件中的字符串进行排序?

2024-10-02 22:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我的Python程序生成熊猫格式的数据文件

        Source    LogP    MolWt  HBA  HBD
0        cne_1  1.1732  263.405    3    1
1       cne_10  2.6639  197.237    2    0
2      cne_100 -0.2886  170.193    4    2
3     cne_1000  1.9644  304.709    5    1
4     cne_1001  1.4986  162.144    3    1
...        ...     ...      ...  ...  ...
1031   cne_995  3.0179  347.219    4    2
1032   cne_996  4.8419  407.495    6    2
1033   cne_997  3.3560  354.524    3    1
1034   cne_998  7.5465  635.316    4    2
1035   cne_999  3.3514  389.556    4    1

我需要根据数字根据第二列(源)对字符串进行排序,因此排序后的行的正确顺序应该是:cne_1、cne_2、cne_3、cne_4等 我尝试使用:

df_sorted = df.sort_values('Source', ascending=True)

但是,这并没有导致线路顺序发生任何变化


Tags: 字符串程序sourcedf排序顺序数据文件格式
3条回答

获取列中的整数值,然后使用该整数值进行排序

df['sortIndex'] = df.Source.str.replace('cne_', '', regex=False).astype(int)
df_sorted = df.sort_values('sortIndex', ascending=True)

提取数字,转换为int并相应排序。(.sort_values(0)因为未命名列自动命名为0

df_sorted = df.loc[df["Source"].str.extract(r"_(\d+)").astype(int).sort_values(0).index]

结果

print(df_sorted)
        Source    LogP    MolWt  HBA  HBD
0        cne_1  1.1732  263.405    3    1
1       cne_10  2.6639  197.237    2    0
2      cne_100 -0.2886  170.193    4    2
1031   cne_995  3.0179  347.219    4    2
1032   cne_996  4.8419  407.495    6    2
1033   cne_997  3.3560  354.524    3    1
1034   cne_998  7.5465  635.316    4    2
1035   cne_999  3.3514  389.556    4    1
3     cne_1000  1.9644  304.709    5    1
4     cne_1001  1.4986  162.144    3    1

对于最新版本,可以使用参数key将值除以_并将值转换为整数:

df_sorted = df.sort_values('Source', key=lambda x: x.str.split('_').str[1].astype(int)) 

或者可以通过^{}获取排序值的位置并传递给^{}

df_sorted = df.iloc[df['Source'].str.split('_').str[1].astype(int).argsort()]
print (df_sorted)
        Source    LogP    MolWt  HBA  HBD
0        cne_1  1.1732  263.405    3    1
1       cne_10  2.6639  197.237    2    0
2      cne_100 -0.2886  170.193    4    2
1031   cne_995  3.0179  347.219    4    2
1032   cne_996  4.8419  407.495    6    2
1033   cne_997  3.3560  354.524    3    1
1034   cne_998  7.5465  635.316    4    2
1035   cne_999  3.3514  389.556    4    1
3     cne_1000  1.9644  304.709    5    1
4     cne_1001  1.4986  162.144    3    1

相关问题 更多 >