簡體   English   中英

將數據框中的數據分組以針對Pandas / Python中的唯一ID生成列表

[英]Grouping data in a dataframe to produce lists against unique ids in Pandas/Python

嗨,我正在使用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並不是特別有效。

數據透視表為您提供了更有用的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

這是另一種方式; 雖然@Andy有點直覺

In [24]: df.groupby('id').apply(
              lambda x: x['color'].value_counts()).unstack().fillna(0)
Out[24]: 
       blue  green  purple  red  yellow
id                                     
21627     1      1       1    2       0
21628     0      1       0    1       1
21629     0      0       0    2       0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM