获取lis的前2个值

2024-05-05 08:56:36 发布

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

在下面的数据框中,我有一个值列表,如何从列表中重复前2个值?你知道吗

数据帧:

user    pro
A   [AA,AA,AA,BB,CC,AA,AA,CC,CC,BB]
B   [AA, BB, EE,BB,BB,EE,AA,CC,BB,EE]
C   [EE,EE,EE,CC,CC,CC,CC,DD,DD,AA]
D   [DD,AA,AA,AA,AA,AA,BB,BB,BB]

预期产量:

A   [AA,CC]
B   [BB,EE]
C   [CC,EE]
D   [AA,BB]

Tags: 数据列表ddeeproaacc产量
2条回答

使用^{}

from collections import Counter

df['new']  = df['pro'].apply(lambda x: [k for k, v in Counter(x).most_common(2)])
print (df)
  user                                       pro       new
0    A  [AA, AA, AA, BB, CC, AA, AA, CC, CC, BB]  [AA, CC]
1    B  [AA, BB, EE, BB, BB, EE, AA, CC, BB, EE]  [BB, EE]
2    C  [EE, EE, EE, CC, CC, CC, CC, DD, DD, AA]  [CC, EE]
3    D      [DD, AA, AA, AA, AA, AA, BB, BB, BB]  [AA, BB]

谢谢@jpp:

df['common'] = [list(zip(*d.most_common(2)))[0] for d in df['pro'].map(Counter)]

感谢@cᴏʟᴅsᴘᴇᴇᴅ:

df['common'] = df.pro.map(lambda x: [k for k, v in Counter(x).most_common(2)])

不知道collections.Counter.most_common我想到了:

from collections import Counter
df['result'] = df['pro'].apply(lambda x: [i[0] for i in sorted(Counter(x).items(), key=lambda x: -x[1])[:2]])

相关问题 更多 >