如何在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中按模式分组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章