python - Pandas Dataframe 排序和列值排序

标签 python pandas dataframe

我想知道是否有人知道如何按以下方式对 pandas 数据框进行排序的好方法:

a) 我有以下随机排序的数据,其 id 出现多次,标签为 0 或 1:

id | label
------ | ------ 
1 | 1
1 | 0
1 | 0
2 | 1
2 | 0
2 | 0
3 | 0
3 | 0
3 | 0

我想按升序对标签进行排序,然后也按升序对 id 进行排序,但不分组,如下所示:

id | label
------ | ------ 
1 | 0
2 | 0
3 | 0
1 | 0
2 | 0
3 | 0
3 | 0
1 | 1
2 | 1

提前致谢!

最佳答案

首先按 id 和标签排序,然后使用 cumcount 创建代表 1,2,3 组的索引,然后按索引和标签排序。

df_out = df.sort_values(by=['id','label'])\
  .set_index(df.groupby('id').cumcount())\
  .sort_index()\
  .sort_values(by='label')

输出:

   id  label
0   1      0
0   2      0
0   3      0
1   1      0
1   2      0
1   3      0
2   3      0
2   1      1
2   2      1

关于python - Pandas Dataframe 排序和列值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45736127/

相关文章:

python cassandra 在生成器中获得 select * 的大结果(没有在 RAM 中存储结果)

python - Pandas 按组聚合排序并计算两列的总和

r - 如何移动嵌套 tibbles 中的 tibbles 列?

python - 如何对每列中的所有值求和并将每列除以求和值

python - 从 List 生成相邻元素

python - 如何加快从 pandas.DataFrame .to_sql 的插入

python - 如何直接从 URL 读取 tar.gz 文件到 Pandas 中?

python - Pandas:添加新列,计算此人达到一天最高分的频率

Python Pandas v0.18+ : is there a way to resample a dataframe without filling NAs?

python - 根据键值删除日期在所需日期点之前的行