如何在python中按模式分组?
我试图通过使用下面的数据框,根据模式查找项目属于哪个类别 资料 我想弄清楚的是,通过获取我想要根据类别模式为每个唯一项目分配类别的唯一项目 预期产出:如何在python中按模式分组?,python,pandas,scipy,Python,Pandas,Scipy,我试图通过使用下面的数据框,根据模式查找项目属于哪个类别 资料 我想弄清楚的是,通过获取我想要根据类别模式为每个唯一项目分配类别的唯一项目 预期产出: ITEM CATEGORY 1 red saree actual 2 glass lbh 3 bottle actual 请告诉我如何在python中找到答案,提前谢谢 尝试: import pandas as pd from scipy.stats import mode data_
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'])
我知道它甚至与此无关,但找不到如何为该编写代码。您可以将“ITEM”和“CATEGORY”列分组,然后在df groupby对象上调用
apply
,并传递函数。然后我们可以调用reset_index
并传递paramdrop=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
您可以将“ITEM”和“CATEGORY”列分组,然后在df groupby对象上调用
apply
,并传递函数。然后我们可以调用reset_index
并传递paramdrop=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
由于您已经在使用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
由于您已经在使用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
7-glass-actual
去了哪里?我想问的是,我们有一个具有3个类别(实际、lbh、lbh)的项目(玻璃),那么项目(玻璃)的类别模式是lbh。我如何使用python分配它是lbh
而不是actual
?7 glass actual去了哪里?我要问的是,我们有一个具有3个类别(实际、lbh、lbh)的项目(玻璃),那么项目(玻璃)的类别模式是lbh。我如何使用python分配它是lbh
而不是actual
?谢谢你的回答!但我应该说,例如:如果我们有值,而不是类别可变的类型。我需要从中找出最大值。例如:我们有一个项目(玻璃)有3个值(1.5,2.5,3.5),那么项目(玻璃)的最大类别是3.5。然后我需要说3.5属于“实际”或“LBH”。我怎样才能找到它python@surendra这是一个新问题,请作为一个全新的问题发布,谢谢你的回答!但我应该说,例如:如果我们有值,而不是类别可变的类型。我需要从中找出最大值。例如:我们有一个项目(玻璃)有3个值(1.5,2.5,3.5),那么项目(玻璃)的最大类别是3.5。然后我需要说3.5属于“实际”或“LBH”。我怎样才能找到它python@surendra这是一个新问题,请作为一个全新的问题发布,谢谢