在 Pandas 数据框中按字母顺序排序数据。

7

我有一个数据框,需要按字母顺序排序其中一列的内容(逗号分隔):

ID   Data
1     Mo,Ab,ZZz
2     Ab,Ma,Bt
3     Xe,Aa
4     Xe,Re,Fi,Ab

输出:

ID   Data
1     Ab,Mo,ZZz
2     Ab,Bt,Ma
3     Aa,Xe
4     Ab,Fi,Re,Xe

我尝试过:
df.sort_values(by='Data')

但这并不起作用。

这个回答解决了你的问题吗?在单元格内对字符串序列进行排序 - Georgy
5个回答

9
你可以先使用split函数将文本分割成单词,然后排序这些单词,最后再将它们合并起来。
df['Data'] = df['Data'].apply(lambda x: ','.join(sorted(x.split(','))))

或者使用列表推导式的替代方法:

df['Data'] = [','.join(sorted(x.split(','))) for x in df['Data']]

print (df)
   ID         Data
0   1    Ab,Mo,ZZz
1   2     Ab,Bt,Ma
2   3        Aa,Xe
3   4  Ab,Fi,Re,Xe

7

IIUC get_dummies

s=df.Data.str.get_dummies(',')
df['n']=s.dot(s.columns+',').str[:-1]
df
Out[216]: 
   ID         Data            n
0   1    Mo,Ab,ZZz    Ab,Mo,ZZz
1   2     Ab,Ma,Bt     Ab,Bt,Ma
2   3        Xe,Aa        Aa,Xe
3   4  Xe,Re,Fi,Ab  Ab,Fi,Re,Xe

6
使用explodesort_values
df["Sorted_Data"] = (
    df["Data"].str.split(",").explode().sort_values().groupby(level=0).agg(','.join)
)

print(df)

   ID         Data  Sorted_Data
0   1    Mo,Ab,ZZz    Ab,Mo,ZZz
1   2     Ab,Ma,Bt     Ab,Bt,Ma
2   3        Xe,Aa        Aa,Xe
3   4  Xe,Re,Fi,Ab  Ab,Fi,Re,Xe

1
聚合连接是必要的。 - jezrael

6

如果我理解正确,你可以使用列表推导式:

[','.join(sorted(i.split(','))) for i in df['Data']]
#['Ab,Mo,ZZz', 'Ab,Bt,Ma', 'Aa,Xe', 'Ab,Fi,Re,Xe']

3

使用行迭代:

for index, row in df.iterrows(): 
    row['Data'] = ','.join(sorted(row['Data'].split(','))) 


In [29]: df   
Out[29]:                                                                                                                                                            
          Data
0    Ab,Mo,ZZz
1     Ab,Bt,Ma
2        Aa,Xe
3  Ab,Fi,Re,Xe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接