我想显示使用过某个值的用户。
import pandas as pd
user = ['alice', 'bob', 'tim', 'alice']
val = [['a','b','c'],['a'],['c','d'],['a','d']]
df = pd.DataFrame({'user': user, 'val': val})
user val
'alice' [a, b, c]
'bob' [a]
'tim' [c, d]
'alice' [a, d]
期望的输出:
val users
a [alice,bob]
b [alice]
c [alice,tim]
d [alice,tim]
有什么想法吗?
请您参考如下方法:
第一步
reshape 您的数据 -
from itertools import chain
df = pd.DataFrame({
'val' : list(chain.from_iterable(df.val.tolist())),
'user' : df.user.repeat(df.val.str.len())
})
第 2 步
使用groupby + apply + unique:
df.groupby('val').user.apply(lambda x: x.unique().tolist())
val
a [alice, bob]
b [alice]
c [alice, tim]
d [tim, alice]
Name: user, dtype: object
