我知道如何获取列表列表中出现次数最多的元素,例如
a = [[3,4], [3,4],[3,4], [1,2], [1,2], [1,1],[1,3],[2,2],[3,2]]
print max(a, key=a.count)
应该打印 [3, 4],即使最常见的数字是第一个元素的 1 和第二个元素的 2。
我的问题是如何用 Pandas.DataFrame 做同样的事情。
例如,我想知道以下方法get_max_freq_elem_of_df的实现:
def get_max_freq_elem_of_df(df):
# do some things
return freq_list
df = pd.DataFrame([[3,4], [3,4],[3,4], [1,2], [1,2], [1,1],[1,3],[2,2],[4,2]])
x = get_max_freq_elem_of_df(df)
print x # => should print [3,4]
请注意 DataFrame.mode() 方法不起作用。对于上面的示例,df.mode() 返回 [1, 2] 而不是 [3,4]
更新
已经解释了为什么 DataFrame.mode() 不起作用。
请您参考如下方法:
您可以使用 groupby.size 然后找到最大值:
>>> df.groupby([0,1]).size()
0 1
1 1 1
2 2
3 1
2 2 1
3 4 3
4 2 1
dtype: int64
>>> df.groupby([0,1]).size().idxmax()
(3, 4)
