python - 按列的子字符串对 Pandas Dataframe 进行排序

标签 python pandas dataframe python-3.6

给定一个 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

解释:

  1. 第一个reset_index drop=True 用于唯一的默认索引<​​/li>
  2. 然后 split新的 DataFramesort_values 的值
  3. 最后 reindex新订单

关于python - 按列的子字符串对 Pandas Dataframe 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727872/

相关文章:

python - myhdl 中的模块实例化

python - 为什么从 git repo 进行 pip 安装时 #egg=foo

python - 按名称引用对象作为属性

python - 在特定的行/列 Pandas 中插入 NA

python - 在python 3中查找表中名称第一个字符的频率分布

python - 如何比较 Pandas 中的两个字符串变量?

python - python 3中的垂直打印字符串

python - 如何检查元素是否是 Pandas 中的空列表?

python - 删除 Pandas 数据框中的 NaN/NULL 列?

python - 将数据透视表转换为数据框