Python 我如何按计数筛选一个数据集,并同时对组进行平均?

Python 我如何按计数筛选一个数据集,并同时对组进行平均?,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,是否有一种方法可以有效地根据数据帧(.groupby)中的实例数进行过滤,并计算所述过滤组的平均值 让我们以我拥有的数据帧为例t_用户和c_用户进行配对,配对的月份和年份以及计算列 x = [ [ 1000 , 4756 , 6 , 2017 , 0.36 ], [1000 , 2357 , 6 , 2017 , 0.42 ], [ 1000 , 2400 , 6 , 2017 , 0.76 ], [ 1000 , 2400 , 6 , 2017 , 1.

是否有一种方法可以有效地根据数据帧(.groupby)中的实例数进行过滤,并计算所述过滤组的平均值

让我们以我拥有的数据帧为例
t_用户
c_用户
进行配对,配对的月份和年份以及计算列

x = [
[ 1000   , 4756   , 6  , 2017 , 0.36 ],
[1000   , 2357   , 6  , 2017 , 0.42 ],
[ 1000   , 2400   , 6  , 2017 , 0.76 ],
[ 1000   , 2400   , 6  , 2017 , 1.11 ],
[ 1000   , 2400   , 6  , 2017 , 0.27 ],
[ 1000   , 2400   , 6  , 2017 , 1.57 ],
[ 2399   , 9531   , 6  , 2017 , 0.57 ],
[ 3999   , 8532   , 6  , 2017 , 0.27 ],
[ 3999   , 2138   , 6  , 2017 , 1.76] ,
[ 1039   , 4215   , 6  , 2017 , 0.26]
]

df = pd.DataFrame(x, columns=['t_user','c_user','mo','yr','tval'])


|    | t_user | c_user | mo | yr   | tval |
|----|--------|--------|----|------|------|
| 0  | 1000   | 4756   | 6  | 2017 | 0.36 |
| 1  | 1000   | 2357   | 6  | 2017 | 0.42 |
| 2  | 1000   | 2400   | 6  | 2017 | 0.76 |
| 3  | 1000   | 2400   | 6  | 2017 | 1.11 |
| 4  | 1000   | 2400   | 6  | 2017 | 0.27 |
| 6  | 1000   | 2400   | 6  | 2017 | 1.57 |
| 7  | 2399   | 9531   | 6  | 2017 | 0.57 |
| 8  | 3999   | 8532   | 6  | 2017 | 0.27 |
| 9  | 3999   | 2138   | 6  | 2017 | 1.76 |
| 10 | 1039   | 4215   | 6  | 2017 | 0.26 |
在本例中,我想对出现4次的所有用户对进行分组。只有一对符合这一点(索引2-6,账户对1000和2400)

我知道第一点是很容易实现的

df=df.groupby(['t_user','c_user','mo','yr']).size().reset_index(name='ct')
df=df[df['ct']==24]。重置索引()
同时,我想对这4行中该对的
tval
列求平均值。我不需要任何其他数据。在哪里发生的

理想情况下,结果将应用于更大的数据集,返回满足数字要求的所有行,如下所示:

| t_user | c_user | mo | yr   | tval_avg |
|--------|--------|----|------|----------|
| 1000   | 2400   | 6  | 2017 |   0.93   |


我尝试了一个
df.groupby().size()
并加入了
df.groupby.mean()
,但它非常混乱,无法正常工作。我想我可能遗漏了一些简单的东西。

您应该能够使用
groupby
+
transform
来计算、过滤和应用平均值

transform
将保留原始结构(只需重复值),因此您可以使用它在相同的切片函数上进行过滤

下面是一个例子:

gpd=df[
df.groupby(['t_user','c_user','mo','yr'])。transform('count')。值>=4#过滤大于3
].groupby(['t_user','c_user','mo','yr']).agg({'tval':'mean'}).reset_index()##聚合结果
gpd
出[1]:
t_用户c_用户mo yr tval
0   1000    2400    6   2017    0.9275

您应该能够使用
groupby
+
transform
来计算、过滤和应用平均值

transform
将保留原始结构(只需重复值),因此您可以使用它在相同的切片函数上进行过滤

下面是一个例子:

gpd=df[
df.groupby(['t_user','c_user','mo','yr'])。transform('count')。值>=4#过滤大于3
].groupby(['t_user','c_user','mo','yr']).agg({'tval':'mean'}).reset_index()##聚合结果
gpd
出[1]:
t_用户c_用户mo yr tval
0   1000    2400    6   2017    0.9275

工作完美无瑕。非常感谢你!随时@Mac,很高兴为您提供帮助!工作完美无瑕。非常感谢你!随时@Mac,很高兴为您提供帮助!