如果你真的想这样做,你可以使用 groupby 应用:
In [11]: df.groupby('id').apply(lambda x: list(set(x['colours'])))
Out[11]:
id
21627 [blue, purple, green, red]
21628 [green, red, yellow]
21629 [red]
dtype: object
In [12]: df.groupby('id').apply(lambda x: list(x['colours']))
Out[12]:
id
21627 [red, green, red, blue, purple]
21628 [yellow, red, green]
21629 [red, red]
dtype: object
但是,包含列表的 DataFrame 并不是特别有效。
数据透视表为您提供更有用的 DataFrame:
In [21]: df.pivot_table(rows='id', cols='colours', aggfunc=len, fill_value=0)
Out[21]:
colours blue green purple red yellow
id
21627 1 1 1 2 0
21628 0 1 0 1 1
21629 0 0 0 2 0
我最喜欢的功能get_dummies
可以让你做到这一点,但没有那么优雅或高效(但我会保留这个原始的,如果疯狂的话,建议):
In [22]: pd.get_dummies(df.set_index('id')['colours']).reset_index().groupby('id').sum()
Out[22]:
blue green purple red yellow
id
21627 1 1 1 2 0
21628 0 1 0 1 1
21629 0 0 0 2 0