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