大熊猫按每组的唯一出现次数进行汇总

时间:2020-10-09 19:29:00

标签: pandas

在熊猫中,我想分析是否存在一个条件值的组。我提供了一个示例数据框,并在下面尝试了确定此类组的第一步。因此,比方说,在下面的数据框中,我只想过滤原始萼片长度大于6的虹膜物种的原始数据帧。在最后一条命令中,我要对唯一物种组的数量进行计数的萼片长度大于6(因此,至少我能数出它们)。

但是,我真正想要的是原始数据框,其中仅当物种的萼片长度大于6时才分析行(因此,这将是没有物种“ setosa”的数据框,因为它们永远都没有)。 / p>

更长的解释是我有一个真实的用户数据集。每个用户在某些列中的值可能会超过感兴趣的阈值。我还没有弄清楚如何分析具有这些阈值的用户。

也许循环会更好。我可能会遍历每个唯一的用户名,并查看该用户的任何行是否超过某个值并获得某种新列(尽管我知道熊猫中不赞成使用循环,所以我在这里发布以查看是否存在某种类型出现的识别组的方法)

谢谢,让我知道我是否能使这个问题更清楚!

import pandas as pd
import seaborn as sns
import numpy as np

pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None) 

iris = sns.load_dataset('iris')

iris['longsepal'] = iris['sepal_length'] > 7

iris['longpetal'] = iris['petal_length'] > 5

iris.groupby(['longsepal'])['species'].nunique()

1 个答案:

答案 0 :(得分:3)

请考虑groupby().transform()来计算内联max,然后根据种类对其值进行过滤。从技术上讲,> 7仅在veriscolor最大值达到7.0时返回一个物种。下面显示了不等式逻辑的运算符和函数形式。

iris['longsepal'] = iris.groupby(['species'])['sepal_length'].transform('max')
iris['longpetal'] = iris.groupby(['species'])['petal_length'].transform('max')

# DATA FILTERS
longsepal_iris = iris.loc[iris['longsepal'] > 7]     # GREATER THAN OPERATOR FORM: >
longsepal_iris = iris.loc[iris['longsepal'].gt(7)]   # GREATER THAN FUNCTIONAL FORM: gt()

longpetal_iris = iris.loc[iris['longpetal'] > 5]     # GREATER THAN OPERATOR FORM: >   
longpetal_iris = iris.loc[iris['longpetal'].gt(5)]   # GREATER THAN FUNCTIONAL FORM: gt()

# SPECIES
longsepal_iris['species'].unique()       
# ['virginica']

longpetal_iris['species'].unique()    
# ['versicolor' 'virginica']
相关问题