pandas 如果有重复值,如何获取panda Dataframe 中的前n个值

ecr0jaav  于 2023-01-24  发布在  其他
关注(0)|答案(2)|浏览(138)

我有一个Pandas数据框说:
| x|Y型|z|
| - ------|- ------|- ------|
| 1个|项目a|x|
| 1个|B|Y型|
| 1个|(c)秘书长的报告|z|
| 第二章|项目a|x|
| 第二章|B|x|
| 三个|项目a|Y型|
| 四个|项目a|z|
如果我想要x的前2个值,我指的是x列的前2个值,它给出:
| x|Y型|z|
| - ------|- ------|- ------|
| 1个|项目a|x|
| 1个|B|Y型|
| 1个|(c)秘书长的报告|z|
| 第二章|项目a|x|
| 第二章|B|x|
如果我想要y列的前2个值,我指的是y列的前2个值,它给出:
| x|Y型|z|
| - ------|- ------|- ------|
| 1个|项目a|x|
| 1个|B|Y型|
| 第二章|项目a|x|
| 第二章|B|x|
| 三个|项目a|Y型|
| 四个|项目a|z|
我怎样才能做到这一点?

mnemlml8

mnemlml81#

您可以用途:

>>> df[df['x'].isin(df['x'].value_counts().head(2).index)]
   x  y  z
0  1  a  x
1  1  b  y
2  1  c  z
3  2  a  x
4  2  b  x

>>> df[df['y'].isin(df['y'].value_counts().head(2).index)]
   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
blmhpbnm

blmhpbnm2#

def select_top_k(df, col, top_k):
    grouping_df = df.groupby(col)
    gr_list = list(grouping_df.groups)[:top_k]
    
    temp = grouping_df.filter(lambda x: x[col].iloc[0] in gr_list)
    return temp
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)

col = 'x'
top_k = 2

select_top_k(df, col, top_k)

相关问题