gpt4 book ai didi

python - 在数据框中对数据进行分组以根据 Pandas/Python 中的唯一 ID 生成列表

转载 作者:太空宇宙 更新时间:2023-11-04 07:09:39 24 4
gpt4 key购买 nike

您好,我正在使用 pandas/python,并且有一个数据框如下所示:

21627   red
21627 green
21627 red
21627 blue
21627 purple
21628 yellow
21628 red
21628 green
21629 red
21629 red

我想减少到:

21627   red, green, blue, purple
21628 yellow, red, green
21629 red

执行此操作(并将列表中的所有值折叠为唯一值)的最佳方法是什么?

此外,如果我想保留冗余:

21627   red, green, red, blue, purple
21628 yellow, red, green
21629 red, red

实现此目标的最佳方法是什么?

在此先感谢您的帮助。

最佳答案

如果您真的想这样做,您可以使用 groupby apply:

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 并不是特别有效。

Pivot table为您提供更有用的 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

关于python - 在数据框中对数据进行分组以根据 Pandas/Python 中的唯一 ID 生成列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com