Python 如何从pandas中的每列中获取n个最大列值

Python 如何从pandas中的每列中获取n个最大列值,python,pandas,dataframe,mode,Python,Pandas,Dataframe,Mode,我知道如何使用“模式”获取数据帧中每列的最频繁值。例如: df = pd.DataFrame({'A': [1, 2, 1, 2, 2, 3]}) df.mode() A 0 2 但我无法找到数据帧中每列的“n”最频繁值?例如,对于提到的数据帧,我希望n=2的输出如下: A 0 2 1 1 任何指针?一种方法是使用pd.Series.value\u计数并提取索引: df = pd.DataFrame({'A': [1, 2, 1, 2, 2, 3]}) res = pd.

我知道如何使用“模式”获取数据帧中每列的最频繁值。例如:

df = pd.DataFrame({'A': [1, 2, 1, 2, 2, 3]})
df.mode()
   A
0  2
但我无法找到数据帧中每列的“n”最频繁值?例如,对于提到的数据帧,我希望n=2的输出如下:

   A
0  2
1  1

任何指针?

一种方法是使用
pd.Series.value\u计数
并提取索引:

df = pd.DataFrame({'A': [1, 2, 1, 2, 2, 3]})

res = pd.DataFrame({col: df[col].value_counts().head(2).index for col in df})

#    A
# 0  2
# 1  1
通过索引使用和选择索引值,但它对每一列都单独起作用,因此需要使用
数据帧构造函数
应用
dict comprehension
。如果不存在可能的指标,则需要转换到系列
,以获得更一般的解决方案,例如:

df = pd.DataFrame({'A': [1, 2, 1, 2, 2, 3], 
                   'B': [1, 1, 1, 1, 1, 1]})

N = 2
df = df.apply(lambda x: pd.Series(x.value_counts().index[:N]))
或:

对于更通用的解决方案,请首先选择数字列:


N = 2
df = pd.DataFrame({x:pd.Series( df[x].value_counts().index[:N]) for x in df.columns})

print (df)
   A    B  C
0  2  1.0  d
1  1  NaN  e
df = pd.DataFrame({'A': [1, 2, 1, 2, 2, 3], 
                   'B': [1, 1, 1, 1, 1, 1],
                   'C': list('abcdef')})

N = 2
df = df.select_dtypes([np.number]).apply(lambda x: pd.Series(x.value_counts().index[:N]))
N = 2
cols = df.select_dtypes([np.number]).columns
df = pd.DataFrame({x: pd.Series(df[x].value_counts().index[:N]) for x in cols})

print (df)
   A    B  C
0  2  1.0  d
1  1  NaN  e