在DataFrame中查找最频繁的组合

3

我有一个包含两列FromTo的DataFrame,我需要知道最常见的地点组合FromTo

例子:

From        To
------------------
Home        Office
Home        Office
Home        Office
Airport     Home
Restaurant  Office
3个回答

2
如果顺序很重要:
df['FROM_TO'] = df['FROM'] + df['TO']

df['COUNT'] = 1

df.groupby(['FROM_TO'])['COUNT'].sum()

一次性给出所有的出现情况。只需取最大值即可找到最大出现次数。

如果顺序很重要,先对值进行排序:

df.loc[:,:] = np.sort(df.values, axis=1) # 如果 df 只包含 FROM 和 TO 两列。


感谢 @Eddy,非常感谢您的回复。 - Harry Smith

1
你可以将这两列组合在一起,并计算每个组合出现的次数,然后按照该次数对组合进行排序。
以下代码可完成此操作:
df.groupby(["From", "To"]).size().sort_values(ascending=False)

"而且,对于问题的示例,它返回:"
From        To
-----------------------
Home        Office    3
Restaurant  Office    1
Airport     Home      1

1

如果我理解正确,SeriesGroupBy.value_countsSeries.idxmax

df.groupby('From')['To'].value_counts().idxmax()

输出

('Home', 'Office')

一般来说,groupby.value_countsgroupby.size 更快。

另一种方法:

df.apply(tuple, axis=1).value_counts().idxmax()

或者

df.apply(tuple, axis=1).mode()

输出

0    (Home, Office)
dtype: object

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接