python - 对 pandas 中的列值进行排序

标签 python pandas

在下面的数据框中,在每一行中,我希望 name1 值是 name1name2 中较小的值。

data = {'name1': ['Jason', 'Molly', 'Tina', 'yuma', 'Amy'],
        'name2': ['Cochice', 'Pima', 'Santa', 'Maria', 'Yuma'],
        'val': [12, 22, 4, 9, 7],
        'db' : ['xx','yy', 'zz', 'mm', 'aa']}
df = DataFrame(data)
df


db  name1   name2   val
xx  Jason   Cochice 12
yy  Molly   Pima    22
zz  Tina    Santa   4
mm  yuma    Maria   9
aa  Amy Yuma    7

据我所知,排序只能按行完成。如何以这种方式排列值?

预期输出是:

db  name1   name2   val
xx  Cochice Jason   12
yy  Molly   Pima    22
zz  Santa   Tina    4
mm  Amy     Maricopa    9
aa  Amy     Yuma    7

最佳答案

您可以将applysorted一起使用,但首先set_index最后reset_index :

print (df.set_index('val').apply(sorted, axis=1).reset_index())
   val    name1  name2
0    2  Cochice  Jason
1    2    Molly   Pima
2    3    Santa   Tina
3    3      Amy  Maria
4    3      Amy   Yuma

np.sort类似的解决方案:

print (df.set_index('val').apply(np.sort, axis=1).reset_index())
   val    name1  name2
0    2  Cochice  Jason
1    2    Molly   Pima
2    3    Santa   Tina
3    3      Amy  Maria
4    3      Amy   Yuma

如果多列使用子集:

df[['name1','name2']] = df[['name1','name2']].apply(np.sort, axis=1)
print (df)
   db    name1  name2  val
0  xx  Cochice  Jason    2
1  yy    Molly   Pima    2
2  zz    Santa   Tina    3
3  mm      Amy  Maria    3
4  aa      Amy   Yuma    3

关于python - 对 pandas 中的列值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40957347/

相关文章:

python - 更换 Shell 管道

Python 3.4.3 asyncio 关键字 SyntaxError

python - 分桶日期并检查是否在 Pandas 的日期范围之间

python - 如果同一行存在于另一个数据框中,如何删除 Pandas 数据框中的行?

python - 创建并附加到 SQLAlchemy 数据库表中的列表

Python BeautifulSoup - 可以从页面获取 X 数量的链接吗?

python - python中不同列中列内的字典的拆分列表

python - pandas 将索引值转换为小写

python - 在 panda 数据框中添加具有重复索引的行

python - 在 Windows 中通过 Anaconda 安装 NumPy