Python 熊猫-按查看的最后一页排序顺序

Python 熊猫-按查看的最后一页排序顺序,python,pandas,google-analytics,Python,Pandas,Google Analytics,有人能帮我把最后一页的浏览顺序排序吗 我有一个dataframe,我正试图根据上一页查看的内容对其进行排序,我真的很难想出一个使用Pandas的有效方法 例如: +------------+------------------+----------+ | Customer | previousPagePath | pagePath | +------------+------------------+----------+ | 1051471580 | A |

有人能帮我把最后一页的浏览顺序排序吗

我有一个dataframe,我正试图根据上一页查看的内容对其进行排序,我真的很难想出一个使用Pandas的有效方法

例如:

+------------+------------------+----------+
|  Customer  | previousPagePath | pagePath |
+------------+------------------+----------+
| 1051471580 | A                | D        |
| 1051471580 | C                | B        |
| 1051471580 | A                | exit     |
| 1051471580 | B                | A        |
| 1051471580 | D                | A        |
| 1051471580 | entrance         | C        |
+------------+------------------+----------+
为此:

 +------------+------------------+----------+
 |  Customer  | previousPagePath | pagePath |
 +------------+------------------+----------+
 | 1051471580 | entrance         | C        |
 | 1051471580 | C                | B        |
 | 1051471580 | B                | A        |
 | 1051471580 | A                | D        |
 | 1051471580 | D                | A        |
 | 1051471580 | A                | exit     |
 +------------+------------------+----------+
然而,对于成千上万的不同客户来说,它可能有数百万行长,因此我真的需要考虑如何使其高效

pd.DataFrame({
    'Customer':'1051471580',
    'previousPagePath': ['E','C','B','A','D','A'],
    'pagePath': ['C','B','A','D','A','F']
})

谢谢

您可以像这样按列对数据帧进行排序

df = pd.DataFrame({'Customer':'1051471580','previousPagePath':['E','C','B','A','D','A'], 'pagePath':['C','B','A','D','A','F']})
    
df.sort_values(by='previousPagePath')

您可以在这里找到文档

您试图做的是拓扑排序,这可以通过networkx实现。请注意,我必须更改数据帧中的一些值,以防止它抛出循环错误,因此我希望您处理的数据包含唯一的值:

import networkx as nx
import pandas as pd

data = [ [1051471580, "Z", "D"], [1051471580,"C","B"  ], [1051471580,"A","exit"  ], [1051471580,"B","Z"  ], [1051471580,"D","A"  ], [1051471580,"entrance","C"  ] ]
df = pd.DataFrame(data, columns=['Customer', 'previousPagePath', 'pagePath'])

edges = df[df.pagePath != df.previousPagePath].reset_index()
dg = nx.from_pandas_edgelist(edges, source='previousPagePath', target='pagePath', create_using=nx.DiGraph())
order = list(nx.lexicographical_topological_sort(dg))
result = df.set_index('previousPagePath').loc[order[:-1], :].dropna().reset_index()
result = result[['Customer', 'previousPagePath', 'pagePath']]
输出:

|    |   Customer | previousPagePath   | pagePath   |
|---:|-----------:|:-------------------|:-----------|
|  0 | 1051471580 | entrance           | C          |
|  1 | 1051471580 | C                  | B          |
|  2 | 1051471580 | B                  | Z          |
|  3 | 1051471580 | Z                  | D          |
|  4 | 1051471580 | D                  | A          |
|  5 | 1051471580 | A                  | exit       |

不幸的是,在这种情况下,这是行不通的。我担心有多种可能性。重建过程似乎无法区分,例如,这两条路径
Enter→ A.→ B→ A.→ C→ A.→ 退出
进入→ A.→ C→ A.→ B→ A.→ 退出
。这个问题还有其他限制吗?