Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas:基于组聚合筛选DataFrameGroupBy(df.groupby)_Python_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

Python Pandas:基于组聚合筛选DataFrameGroupBy(df.groupby)

Python Pandas:基于组聚合筛选DataFrameGroupBy(df.groupby),python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,直接使用 df | a | b | |----|---| | 10 | 1 | | 10 | 5 | | 11 | 1 | 让我们只获得 grouped = df.groupby('a') 屈服 selector = grouped.b.max() - grouped.b.min() >= 3 我的问题是,当使用DataFrameGroupBy元素时,df=df.loc[]的等价物是什么 在基于.aggreate函数进行筛选时,是否有办法保留组?谢谢 您可以使用峰到峰 df |

直接使用

df
| a  | b |
|----|---|
| 10 | 1 |
| 10 | 5 |
| 11 | 1 |
让我们只获得

grouped = df.groupby('a')
屈服

selector = grouped.b.max() - grouped.b.min() >= 3
我的问题是,当使用DataFrameGroupBy元素时,df=df.loc[]的等价物是什么

在基于.aggreate函数进行筛选时,是否有办法保留组?谢谢

您可以使用峰到峰

df
| a  |       |
|----|-------|
| 10 | True  |
| 11 | False |
您可以使用峰到峰

df
| a  |       |
|----|-------|
| 10 | True  |
| 11 | False |

遗憾的是,我没有找到一个直接的解决办法。。所以我使用2个groupby解决了这个问题:


遗憾的是,我没有找到一个直接的解决办法。。所以我使用2个groupby解决了这个问题:

对于df.loc[]等效问题,您只需执行以下操作:

df=df.set_索引'a'\ .loc[df.groupby'a'.b.aggnp.ptp.gt3]\ .reset_索引 或者,内部连接解决方案:

选择器=df.groupby'a'.b.aggnp.ptp.gt3 选择器=选择器。loc[选择器] df=df.mergeselector,on='a',后缀=[,\u drome] df=df.loc[:,filterlambda col:_dropmenot in col,df.columns] 产出:

a b 0 10 1 1 10 5 PS+1@rafaelc-对于.ptp问题

对于df.loc[]等效问题,您只需执行以下操作:

df=df.set_索引'a'\ .loc[df.groupby'a'.b.aggnp.ptp.gt3]\ .reset_索引 或者,内部连接解决方案:

选择器=df.groupby'a'.b.aggnp.ptp.gt3 选择器=选择器。loc[选择器] df=df.mergeselector,on='a',后缀=[,\u drome] df=df.loc[:,filterlambda col:_dropmenot in col,df.columns] 产出:

a b 0 10 1 1 10 5
PS+1@rafaelc-关于.ptp的事情

Hi@yatu,不,它没有回答这个问题。您的解决方案没有从我编写的代码中获得任何好处。问题不是如何归档筛选条件的一系列真或假-使用grouped.b.max-grouped.b.min>=3可以很好地工作。最初的问题是,我如何将这些True | False选择器应用于DataFrameGroupBy,以仅保留那些为True的组。换句话说:我想过滤掉那些根据选择器为False的组。那么就用结果怎么样?确切地说:我正在寻找一种只保留那些为True的组的解决方案。在DataFrames上使用df.loc可以很容易地完成,但是我没有看到DataFrameGroupByHi@yatu的函数,不,它没有回答这个问题。您的解决方案没有从我编写的代码中获得任何好处。问题不是如何归档筛选条件的一系列真或假-使用grouped.b.max-grouped.b.min>=3可以很好地工作。最初的问题是,我如何将这些True | False选择器应用于DataFrameGroupBy,以仅保留那些为True的组。换句话说:我想过滤掉那些根据选择器为False的组。那么就用结果怎么样?确切地说:我正在寻找一种只保留那些为True的组的解决方案。在数据帧上使用df.loc可以很容易地完成,但是我没有看到DataFrameGroupBy的函数,我不知道np.ptp-谢谢!然而,遗憾的是,这只是grouped.b.max-grouped.b.min>=3的替代版本。这不是问题-我对上面的问题进行了评论以使其更清楚。发布了一个基于两个groupby的解决方案,想知道是否没有直接过滤的可能性DataFrameGroupBy@gies0r嗯,很有趣。你能进一步解释吗?在答案中添加了附加注释+修复了一个快速错误。希望现在更清楚了。我不知道np.ptp-谢谢!然而,遗憾的是,这只是grouped.b.max-grouped.b.min>=3的替代版本。这不是问题-我对上面的问题进行了评论以使其更清楚。发布了一个基于两个groupby的解决方案,想知道是否没有直接过滤的可能性DataFrameGroupBy@gies0r嗯,很有趣。你能进一步解释吗?在答案中添加了附加注释+修复了一个快速错误。希望现在更清楚。groupby'a'。isin不存在。我不确定你希望你的最终结果是什么?此代码不支持run@rafaelc这是一个快速的错误-我用不同的变量名在代码中修复了它,并将其抽象到这个示例中。修正了:groupby'a.isin不存在。我不确定你希望你的最终结果是什么?此代码不支持run@rafaelc这是一个快速的错误-我用不同的变量名在代码中修复了它,并将其抽象到这个示例中。修正了它知道:
a
10     True
11    False
Name: b, dtype: bool
# Build True/False Series for filter criteria
selector = df.groupby('a').b.agg(np.ptp) > 3

# Only select those 'a' which have True in filter criteria
selector = selector.loc[selector == True]

# Re-Create groups of 'a' with the filter criteria in place
# Only those groups for 'a' will be created, where the MAX-MIN of 'b' are > 3.
grouped = df.loc[df['a'].isin(selector.index)].groupby('a')