Python 获取列表的前两个值
在下面的数据框中,我有一个值列表,如何从列表中重复前2个值 数据帧:Python 获取列表的前两个值,python,pandas,Python,Pandas,在下面的数据框中,我有一个值列表,如何从列表中重复前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] 使用:
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]
使用:
谢谢@jpp:
df['common'] = [list(zip(*d.most_common(2)))[0] for d in df['pro'].map(Counter)]
谢谢@cᴏʟᴅᴘᴇᴇᴅ:
df['common'] = df.pro.map(lambda x: [k for k, v in Counter(x).most_common(2)])
不知道我想到了:
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]])
你在使用pandas吗?是的,我在使用pandas替代语法(如果你在做列表理解,你可能不想
apply
)df['common']=[list(zip(*d.most_common(2))[0]表示df['pro'].map(Counter)]
你可以将这两种语法结合起来,然后做df.pro.map(lambda x:[k表示k,v表示k表示k,v表示计数器(x.)中的v表示最常见(2)])
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]])