按字母顺序对 Pandas 数据框中的数据进行排序

Muz*_*uzz 7 numpy dataframe pandas

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

ID   Data
1     Mo,Ab,ZZz
2     Ab,Ma,Bt
3     Xe,Aa
4     Xe,Re,Fi,Ab
Run Code Online (Sandbox Code Playgroud)

输出:

ID   Data
1     Ab,Mo,ZZz
2     Ab,Bt,Ma
3     Aa,Xe
4     Ab,Fi,Re,Xe
Run Code Online (Sandbox Code Playgroud)

我试过了:

df.sort_values(by='Data')
Run Code Online (Sandbox Code Playgroud)

但这不起作用

WeN*_*Ben 8

国际大学联盟 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
Run Code Online (Sandbox Code Playgroud)


jez*_*ael 7

你可以split,排序然后加入:

df['Data'] = df['Data'].apply(lambda x: ','.join(sorted(x.split(','))))
Run Code Online (Sandbox Code Playgroud)

或者使用列表理解替代:

df['Data'] = [','.join(sorted(x.split(','))) for x in df['Data']]
Run Code Online (Sandbox Code Playgroud)
print (df)
   ID         Data
0   1    Ab,Mo,ZZz
1   2     Ab,Bt,Ma
2   3        Aa,Xe
3   4  Ab,Fi,Re,Xe
Run Code Online (Sandbox Code Playgroud)


Dat*_*ice 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
Run Code Online (Sandbox Code Playgroud)


ank*_*_91 6

IIUC 你可以使用列表理解:

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