Сортировать данные в Pandas по алфавиту - PullRequest
7 голосов
/ 19 марта 2020

У меня есть фрейм данных, где мне нужно отсортировать содержимое одного столбца (через запятую) в алфавитном порядке:

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')

Но это не работает

Ответы [ 5 ]

8 голосов
/ 19 марта 2020

IIU C 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
7 голосов
/ 19 марта 2020

Вы можете 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
6 голосов
/ 19 марта 2020

IIU C Вы можете использовать понимание списка:

[','.join(sorted(i.split(','))) for i in df['Data']]
#['Ab,Mo,ZZz', 'Ab,Bt,Ma', 'Aa,Xe', 'Ab,Fi,Re,Xe']
6 голосов
/ 19 марта 2020

с использованием 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
3 голосов
/ 19 марта 2020

Использование итерации строки:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...