【发布时间】:2020-11-23 12:11:57
【问题描述】:
我有一个包含两列 From 和 To 的 DataFrame,我需要知道最常见的位置组合 From 和 To。
例子:
From To
------------------
Home Office
Home Office
Home Office
Airport Home
Restaurant Office
【问题讨论】:
我有一个包含两列 From 和 To 的 DataFrame,我需要知道最常见的位置组合 From 和 To。
例子:
From To
------------------
Home Office
Home Office
Home Office
Airport Home
Restaurant Office
【问题讨论】:
如果顺序确实重要:
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 列。
【讨论】:
您可以将两列组合在一起并计算每对出现的次数,然后按此计数对这些对进行排序。
下面的代码完成了这项工作:
df.groupby(["From", "To"]).size().sort_values(ascending=False)
并且,对于问题的示例,它返回:
From To
-----------------------
Home Office 3
Restaurant Office 1
Airport Home 1
【讨论】:
IIUC、SeriesGroupBy.value_counts 和 Series.idxmax
df.groupby('From')['To'].value_counts().idxmax()
输出
('Home', 'Office')
一般groupby.value_counts 比groupby.size 快
另一种方式:
df.apply(tuple, axis=1).value_counts().idxmax()
或者
df.apply(tuple, axis=1).mode()
输出
0 (Home, Office)
dtype: object
【讨论】: