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)
但这不起作用
国际大学联盟 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)
你可以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)
使用explode和sort_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)
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)