Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 首先按时间戳值对列中的行进行排序,然后对列的分类值进行特定排序_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 首先按时间戳值对列中的行进行排序,然后对列的分类值进行特定排序

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

我有一个pandas数据框,它有一列“user”,包含分类值(a、b、c、d)。我只关心两个类别的升序(a,d)。所以(a,b,c,d)和(a,c,b,d)对我来说都很好

如何创建订单是问题的第一部分?

第二,我有另一列包含“时间戳”。我想先按“时间戳”对行进行排序,然后对于具有相同时间戳的行,我想按上述分类值排序

假设我的数据框是这样的

+-----------+------+
| 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