假设有一个测试:
test_df = pd.DataFrame({'Category': ['P', 'P', 'P', 'Q', 'Q', "Q"],
'Subcategory' : ['A', 'B', 'C', 'C', 'A', 'B'],
'Value' : [2.0, 5., 8., 1., 2., 1.]})
这样做可以:
test_df.groupby(['Category', 'Subcategory'])['Value'].sum()
# Output is this
Category Subcategory
P A 2.0
B 5.0
C 8.0
Q A 2.0
B 1.0
C 1.0
我要筛选子类别中至少有一个值大于或等于3的类别。这意味着在当前测试中,Q将从过滤器中排除,因为它的任何行都不大于或等于3。但是,如果其中一行是5,那么Q将保留在过滤器中。你知道吗
我试过使用下面的方法,但是它过滤掉了类别“p”中的“A”子类别。你知道吗
test_df_grouped = test_df.groupby(['Category', 'Subcategory'])
test_df_grouped.filter(lambda x: (x['Value'] > 2).any()).groupby(['Category', 'Subcategory'])['Value'].sum()
提前谢谢!你知道吗
使用
loc
:用途:
首先按条件获取所有
Category
值:要获得更好的性能,请创建
unique
值,感谢@Sandeep Kadapa:然后按^{} 过滤原始列:
在
groupby
之后用MultiIndex
过滤序列的相同解决方案:相关问题 更多 >
编程相关推荐