对相应的匹配数据帧执行操作

2024-04-28 17:02:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧:

User Numbers A 0 A 4 A 5 B 0 B 0 C 1 C 3

我想对每个相应的分组数据执行一个操作。例如,如果我想删除所有具有Number0的Users,它应该如下所示:

User Numbers A 0 A 4 A 5 C 1 C 3

因为{}B的所有{}都是0

或者,例如,如果我想找到所有用户数量的方差,它应该如下所示:

Users Variance A 7 B 0 C 2

这意味着仅计算A的Numbers以查找A的方差,依此类推

是否有一种通用的方法来进行所有这些匹配分组数据的计算


Tags: 数据方法usersnumbers方差varianceuser用户数量
1条回答
网友
1楼 · 发布于 2024-04-28 17:02:15

您需要两个不同的操作-filtration per groupsaggregation per groups

过滤

为了获得更好的性能,最好使用^{}作为布尔掩码,并使用^{}进行过滤

df1 = df[~df['Number'].eq(0).groupby(df['User']).transform('all')]
print (df1)
  User  Number
0    A       0
1    A       4
2    A       5
5    C       1
6    C       3

步骤:

1.首先通过比较^{}来创建布尔序列:

print (df['Number'].eq(0))
0     True
1    False
2    False
3     True
4     True
5    False
6    False
Name: Number, dtype: bool

2.然后使用另一列的syntactic sugar-groupby^{}函数^{}检查每个组的所有Truetransform是否用于与原始DataFrame大小相同的掩码:

print (df['Number'].eq(0).groupby(df['User']).transform('all'))
0    False
1    False
2    False
3     True
4     True
5    False
6    False
Name: Number, dtype: bool

3.通过~反转boolen掩模:

print (~df['Number'].eq(0).groupby(df['User']).transform('all'))
0     True
1     True
2     True
3    False
4    False
5     True
6     True
Name: Number, dtype: bool

4.过滤器:

print (df[~df['Number'].eq(0).groupby(df['User']).transform('all')])
  User  Number
0    A       0
1    A       4
2    A       5
5    C       1
6    C       3

大数据帧中另一个较慢的解决方案,具有filter和与第一个解决方案相同的逻辑:

df2 = df.groupby('User').filter(lambda x: ~x['Number'].eq(0).all())
print (df2)
  User  Number
0    A       0
1    A       4
2    A       5
5    C       1
6    C       3

聚合

对于通过一列和一个聚合函数进行更简单的聚合,例如^{}使用:

df3 = df.groupby('User', as_index=False)['Number'].var()
print (df3)
  User  Number
0    A       7
1    B       0
2    C       2

相关问题 更多 >