Skip to main content
 首页 » 编程设计

python之pandas之具有多个值的 groupby 列

2025年05月04日15qq78292959

我想显示使用过某个值的用户。

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