Python 熊猫-按查看的最后一页排序顺序
有人能帮我把最后一页的浏览顺序排序吗 我有一个dataframe,我正试图根据上一页查看的内容对其进行排序,我真的很难想出一个使用Pandas的有效方法 例如:Python 熊猫-按查看的最后一页排序顺序,python,pandas,google-analytics,Python,Pandas,Google Analytics,有人能帮我把最后一页的浏览顺序排序吗 我有一个dataframe,我正试图根据上一页查看的内容对其进行排序,我真的很难想出一个使用Pandas的有效方法 例如: +------------+------------------+----------+ | Customer | previousPagePath | pagePath | +------------+------------------+----------+ | 1051471580 | A |
+------------+------------------+----------+
| 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.→ 退出
。这个问题还有其他限制吗?