在Pandas中保留同一ID出现超过n次的行,并转换为每个ID的list

2024-09-27 23:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个DataFrame如下:

     VID  value
1     1    xx
2     2    xx1
3     2    xx2
4     2    xx3
5     2    xx4
6     3    xx
7     3    xx
8     3    xx
9     4    zz1
10    4    zz2
11    4    zz3
12    4    zz4
13    4    zz5

我只想保留那些VID存在于n=3以上的行。在上面的示例中,我只保留第2-5行和第9-13行(因为只有VID2和4出现了3次以上)。“值”字段不相关。在

在保留了所需的行之后,我希望将数据转换为列表列表,同时在每个列表的末尾附加一个“end”值:

^{pr2}$

没有for循环就可以得到上面的结果吗?在


Tags: 示例dataframe列表valuexxvidxx3xx2
1条回答
网友
1楼 · 发布于 2024-09-27 23:19:11

您可以按VID列分组,然后计算每个组的计数。然后在这之后,使用它来索引原始的df,以便只获取计数大于3的行。示例-

countdf = df.groupby('VID').count()
result = df.loc[df['VID'].isin(countdf[countdf['value'] > 3].index)]

演示-

^{pr2}$

然后,您可以再次基于VID分组,然后将这些分组转换为list,然后再转换为list,例如-

resultlist = result.groupby('VID')['value'].apply(list).tolist()

演示-

In [54]: result = df.loc[df['VID'].isin(countdf[countdf['value'] > 3].index)]

In [55]: result.groupby('VID')['value'].apply(list).tolist()
Out[55]: [['xx1', 'xx2', 'xx3', 'xx4'], ['zz1', 'zz2', 'zz3', 'zz4', 'zz5']]

请注意,上面不会给你列表中的'end'值,我猜这是没有必要的,但是如果你真的想要,你可以在得到列表后手动添加它。示例-

resultlist = [elem + ['end'] for elem in resultlist]

相关问题 更多 >

    热门问题