使用 pandas groupby 查找列的唯一组合并另存为 df

Posted

技术标签:

【中文标题】使用 pandas groupby 查找列的唯一组合并另存为 df【英文标题】:Use pandas groupby to find unique combinations of columns and save as df 【发布时间】:2021-12-27 03:56:57 【问题描述】:

我有以下熊猫数据框:

df = pd.DataFrame('Colors': ['blue', 'blue', 'orange', 'red',
                              'purple', 'orange', 'purple', 'blue', 'brown'], 
                   'Price': ['500', '500', '200', '250', '300', '765', '1100', '762', 
                              '650', '625'],
                   'Style': ['farm', 'contemporary', 'modern', 'MDM', 'MDM', 
                             'contemporary', 'farm', 'contemporary', 'farm'],
                   'Location': ['far', 'near', 'far', 'far', 'near', 'far', 'far', 'near', 
                                'far'])

我可以通过df.groupby(['Colors', 'Price', 'Style', 'Location']).size() 获取按颜色分类的信息,以查看价格、样式和位置的独特组合,以将颜色作为系列返回。

问题 - 我如何使用它来创建一个新的 pandas Dataframe,其中每列对应一种颜色(蓝色、橙色、红色等)和值的唯一组合(500_contemporary_near、500_farm_far 等)?

我尝试生成的输出示例是一个数据帧,其中有一列名为“Blue”,(每一行)下的每个值都是一个字符串,例如 500_contemporary_near。

蓝色

500_contemporary_near 500_farm_far

【问题讨论】:

【参考方案1】:

你可以unstack

df.groupby(['Colors', 'Price', 'Style', 'Location']).size().unstack(level=0)

【讨论】:

我试过了,但这并不是我的目标。我想生成一个新的数据框,其中对于给定的颜色,有一列颜色(即蓝色),下面的每一行都是其特征的唯一字符串(500_contemporary_near)。所以最后,列是颜色,行对应于给定颜色的唯一字符串特征。 @MAsoccer9 做字符串加入然后 groupby ~ 你能提供明确的例子吗?【参考方案2】:

这个怎么样:

pd.DataFrame([k[0]: '_'.join(k[1:]) for k in \
   df.groupby(['Colors','Price', 'Style', 'Location']).groups]).fillna('')


    blue    brown   orange  purple  red
0   500_contemporary_near               
1   500_farm_far                
2   762_contemporary_near               
3           650_farm_far            
4                   200_modern_far      
5                   765_contemporary_far        
6                           1100_farm_far   
7                           300_MDM_near    
8                                   250_MDM_far

【讨论】:

这更接近我想要实现的目标。通过这个实现,500_contemporary_near、500_farm_far 和 762_contemporary_near 都在同一列“Blue”下,而 650_farm_far 在“Brown”列下等等?对吗? 是的,没错

以上是关于使用 pandas groupby 查找列的唯一组合并另存为 df的主要内容,如果未能解决你的问题,请参考以下文章

pandas-groupby子组的频率计算,新行的插入和列的重新排列

使用 Pandas 查找列的最大值并返回相应的行值

Python Pandas GroupBy 获取组列表

逻辑矩阵的 Pandas Groupby 条形图

使用pandas groupby并申请累积积分

将列的名称保留在 groupby 中,并在 pandas 数据框中使用 sum