Python 3.x 首先按时间戳值对列中的行进行排序,然后对列的分类值进行特定排序
我有一个pandas数据框,它有一列“user”,包含分类值(a、b、c、d)。我只关心两个类别的升序(a,d)。所以(a,b,c,d)和(a,c,b,d)对我来说都很好 如何创建订单是问题的第一部分? 第二,我有另一列包含“时间戳”。我想先按“时间戳”对行进行排序,然后对于具有相同时间戳的行,我想按上述分类值排序 假设我的数据框是这样的Python 3.x 首先按时间戳值对列中的行进行排序,然后对列的分类值进行特定排序,python-3.x,pandas,Python 3.x,Pandas,我有一个pandas数据框,它有一列“user”,包含分类值(a、b、c、d)。我只关心两个类别的升序(a,d)。所以(a,b,c,d)和(a,c,b,d)对我来说都很好 如何创建订单是问题的第一部分? 第二,我有另一列包含“时间戳”。我想先按“时间戳”对行进行排序,然后对于具有相同时间戳的行,我想按上述分类值排序 假设我的数据框是这样的 +-----------+------+ | Timestamp | User | +-----------+------+ | 1 | b
+-----------+------+
| Timestamp | User |
+-----------+------+
| 1 | b |
| 2 | d |
| 1 | a |
| 1 | c |
| 1 | d |
| 2 | a |
| 2 | b |
+-----------+------+
我想先进行这种分类
+-----------+------+
| Timestamp | User |
+-----------+------+
| 1 | b |
| 1 | a |
| 1 | c |
| 1 | d |
| 2 | d |
| 2 | a |
| 2 | b |
+-----------+------+
然后是“用户”的分类顺序
或
+-----------+------+
| Timestamp | User |
+-----------+------+
| 1 | a |
| 1 | c |
| 1 | b |
| 1 | d |
| 2 | a |
| 2 | b |
| 2 | d |
+-----------+------+
正如您所看到的,“c”和“b”的顺序并不重要。您可以通过
类别指定ordered Category中的顺序,然后调用:
如果存在多个值,则可以动态创建类别:
vals = ['a', 'd']
cats = vals + np.setdiff1d(df['User'], vals).tolist()
print (cats)
['a', 'd', 'b', 'c']
df['User'] = pd.Categorical(df['User'], ordered=True, categories=cats)
df = df.sort_values(['Timestamp','User'])
print (df)
Timestamp User
2 1 a
4 1 d
0 1 b
3 1 c
5 2 a
1 2 d
6 2 b
df['User'] = pd.Categorical(df['User'], ordered=True, categories=['a','b','c','d'])
df = df.sort_values(['Timestamp','User'])
print (df)
Timestamp User
2 1 a
0 1 b
3 1 c
4 1 d
5 2 a
6 2 b
1 2 d
vals = ['a', 'd']
cats = vals + np.setdiff1d(df['User'], vals).tolist()
print (cats)
['a', 'd', 'b', 'c']
df['User'] = pd.Categorical(df['User'], ordered=True, categories=cats)
df = df.sort_values(['Timestamp','User'])
print (df)
Timestamp User
2 1 a
4 1 d
0 1 b
3 1 c
5 2 a
1 2 d
6 2 b