给定一个 DataFrame:
name email
0 Carl carl@yahoo.com
1 Bob bob@gmail.com
2 Alice alice@yahoo.com
3 David dave@hotmail.com
4 Eve eve@gmail.com
如何根据电子邮件的域名(按字母顺序,升序)排序,然后在每个域组内,根据“@”之前的字符串排序?
以上排序的结果应该是:
name email
0 Bob bob@gmail.com
1 Eve eve@gmail.com
2 David dave@hotmail.com
3 Alice alice@yahoo.com
4 Carl carl@yahoo.com
最佳答案
使用:
df = df.reset_index(drop=True)
idx = df['email'].str.split('@', expand=True).sort_values([1,0]).index
df = df.reindex(idx).reset_index(drop=True)
print (df)
name email
0 Bob bob@gmail.com
1 Eve eve@gmail.com
2 David dave@hotmail.com
3 Alice alice@yahoo.com
4 Carl carl@yahoo.com
解释:
- 第一个
reset_index
drop=True
用于唯一的默认索引</li> - 然后
split
新的DataFrame
和sort_values
的值 - 最后
reindex
新订单
关于python - 按列的子字符串对 Pandas Dataframe 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727872/