如何在python中按模式分组? [复制]

Posted

技术标签:

【中文标题】如何在python中按模式分组? [复制]【英文标题】:how to group by mode in python? [duplicate] 【发布时间】:2015-07-24 20:45:05 【问题描述】:

我正在尝试使用下面的 pandas 数据框根据模式查找项目属于哪个类别

数据

   ITEM          CATEGORY
1  red saree     actual
2  red saree     actual
3  glass         lbh
4  glass         lbh
5  red saree     actual
6  red saree     lbh
7  glass         actual
8  bottle        actual
9  bottle        actual

我想弄清楚的是,我想根据类别的模式为每个独特的项目分配一个类别。

预期输出:

  ITEM          CATEGORY
1 red saree     actual
2 glass         lbh
3 bottle        actual

请告诉我如何在 python 中查找,提前谢谢

试过了:

import pandas as pd
from scipy.stats import mode
data_x = map(mode, data['category'])

我知道它甚至与那个无关,但无法找到如何编写代码

【问题讨论】:

7 glass actual 去哪儿了? 我要问的是! ,我们有一个物品(玻璃),有 3 个类别(实际,磅,磅),那么物品(玻璃)的类别模式是磅。我如何使用 python 分配 为什么是lbh 而不是actual 【参考方案1】:

您可以对“ITEM”和“CATEGORY”列进行分组,然后在 df groupby 对象上调用 apply 并传递函数 mode。然后我们可以调用reset_index 并传递参数drop=True,这样多索引就不会作为列添加回来,因为您已经拥有这些列:

In [161]:

df.groupby(['ITEM', 'CATEGORY']).apply(pd.DataFrame.mode).reset_index(drop=True)
Out[161]:
        ITEM CATEGORY
0     bottle   actual
1      glass      lbh
2  red saree   actual

【讨论】:

感谢您的回答!但我应该说例如:如果我们在类别变量中有值而不是类型。我需要从中找出最大值。例如:我们有一个具有 3 个值(1.5、2.5、3.5)的项目(玻璃),那么项目(玻璃)的类别的最大值为 3.5。然后我需要说 3.5 属于 'actual' 或 'LBH' 。我如何使用 python 找到它 @surendra 这是一个新问题,请作为一个全新问题发布,谢谢【参考方案2】:

由于您已经在使用 Pandas,如果您更熟悉 SQL,您可以随时尝试 pandasql 并使用它。

from pandasql import sqldf
pysqldf = lambda q: sqldf(q, globals())

q = """
select 
    item, 
    category, 
    count(*) as cnt
from df
group by item, category
"""

df_counts = pysqldf(q)

q1 = """
select b.item, b.category 
from 
    (select 
        item, 
        max(cnt) as max_cnt
    from df_counts
    group by item) as a
    inner join df_counts as b
        on a.item = b.item 
            and a.max_cnt = b.cnt
"""

输出:

>>> pysqldf(q1)
        item category
0  bottle      actual
1  glass          lbh
2  red saree   actual

【讨论】:

以上是关于如何在python中按模式分组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 presto SQL 中按月分组

如何在 BigQuery 中按外键分组?

如何在 Pandas 数据框中按列值分组

如何在 PL/SQL 中按每天分组?

如何使用 Muenchian 分组 XSLT 1.0 在每个目录中按标题分组

如何在 MongoDB 中按日期分组