如何在含重复值的Pandas DataFrame中获取指定列前N个值的对应行
解决方案
首先先构造示例中的DataFrame:
import pandas as pd data = { 'x': [1,1,1,2,2,3,4], 'y': ['a','b','c','a','b','a','a'], 'z': ['x','y','z','x','x','y','z'] } df = pd.DataFrame(data)
1. 获取x列前2个唯一值对应的所有行
这里的"前2个值"指x列原始顺序中的前2个唯一值(即1和2),实现代码如下:
# 提取x列前2个唯一值 top_x_values = df['x'].unique()[:2] # 筛选对应行 result_x = df[df['x'].isin(top_x_values)] print(result_x)
输出结果:
x y z 0 1 a x 1 1 b y 2 1 c z 3 2 a x 4 2 b x
2. 获取y列前2个唯一值对应的所有行
同理,y列原始顺序的前2个唯一值是'a'和'b',实现代码如下:
# 提取y列前2个唯一值 top_y_values = df['y'].unique()[:2] # 筛选对应行 result_y = df[df['y'].isin(top_y_values)] print(result_y)
输出结果:
x y z 0 1 a x 1 1 b y 3 2 a x 4 2 b x 5 3 a y 6 4 a z
补充说明
如果需要按值的出现频率取前2个(而非原始顺序的唯一值),可以用value_counts实现:
# 按频率取y列前2个值 top_y_freq = df['y'].value_counts().index[:2] result_y_freq = df[df['y'].isin(top_y_freq)]
从你的预期结果来看,原始顺序的唯一值筛选更符合需求。
内容的提问来源于stack exchange,提问作者Taylor
相关产品推荐
相关产品推荐

