【问题标题】:How can I sort a mixed list of integers as repeating numbers with pandas like 1-2-3-4-1-2-3-4...? [duplicate]如何将混合的整数列表排序为带有熊猫的重复数字,如 1-2-3-4-1-2-3-4...? [复制]
【发布时间】:2022-01-06 16:36:07
【问题描述】:

我有一个从 1 到 4 的混合整数列表(例如 100 个这样的数字)。我想将此列表排序为(1-2-3-4-1-2-3-4 .... 1-2-3-4)。有没有一种简单的方法可以用 numpy 或 pandas 做到这一点?

[已编辑] @Corralien 的解决方案帮助了我。

import pandas as pd
df = pd.read_csv("students.csv", encoding='utf-8')

df['A'] = df['Class']
df = df.assign(B=df.groupby('A').cumcount()).sort_values(['B', 'A']).drop(columns=['A','B'])

print(df.head(20))

结果:

【问题讨论】:

  • 这样排序有什么必要?似乎使用 for 循环或使用列表构造函数生成列表就足够了。
  • @IceGriffin。是的,可以使用 for 循环。但是对于庞大的列表,它会太慢
  • 这个怎么样? a = [1,2,3,4] * 50

标签: python pandas numpy


【解决方案1】:

创建一个临时列来对数据框进行排序:

>>> df.assign(B=df.groupby('A').cumcount()).sort_values(['B', 'A']).drop(columns='B')

    A
1   1
8   2
3   3
0   4
2   1
9   2
5   3
4   4
11  1
10  2
12  3
6   4
14  1
17  2
13  3
7   4
18  1
19  2
16  3
15  4

设置:

import pandas as pd
import numpy as np

np.random.seed(2022)
df = pd.DataFrame({'A': [1,2,3,4]*5})
df = df.sample(frac=1).reset_index(drop=True)
print(df)

# Output
    A
0   4
1   1
2   1
3   3
4   4
5   3
6   4
7   4
8   2
9   2
10  2
11  1
12  3
13  3
14  1
15  4
16  3
17  2
18  1
19  2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-04
    • 2011-02-11
    • 2022-10-08
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多