首页 > 解决方案 > 从两列中获取组合计数及其反转

问题描述

我正在尝试从 pandas 数据框中获取组合计数,其中它认为组合的反转形式相同。即(A/B 将与 B/A 相同)

类似于这个用户正在尝试做的事情,但是在 python/pandas 上

如何从两列中获取双向组合的计数?

感谢您的帮助!

我探索了交叉表并对数据进行分组,它产生了组合的计数,但它认为相反的顺序是唯一的组合。

Origin    Destination
City 1    City 2
City 2    City 1
City 3    City 4
City 2    City 1

最终结果看起来像

Route                 Count
City 1 - City 2         3
City 3 - City 4         1

注意:路线的顺序无关紧要。它可以是城市 2 - 城市 1,只要它算作相同即可。

标签: pythonpandas

解决方案


您可以使用定义路线np.sort

import numpy as np
import pandas as pd

df['Route'] = [' - '.join(x) for x in np.sort(df.to_numpy(), axis=1)]
df.groupby('Route').size()

#Route
#City 1 - City 2    3
#City 3 - City 4    1
#dtype: int64

您还可以构造一个新的 sorted DataFrame,这可能很有用:

df = pd.DataFrame(np.sort(df.to_numpy(), axis=1), index=df.index, columns=df.columns)

#   Origin Destination
#0  City 1      City 2
#1  City 1      City 2
#2  City 3      City 4
#3  City 1      City 2

现在你可以分组['Origin', 'Destintion']


推荐阅读