我有以下数据框:
df = pd.DataFrame({'Label': list('AABCCC'), 'Values': [1,2,3,4,np.nan,8] })
我想放下那些没有最少项目数量的组(一个或多或少),因此我尝试了以下内容:
f = lambda x: x.Values.count() > 1
df.groupby('Label').filter(f)
但是,这引起了错误:
错误:'numpy.ndarray'对象没有属性'count'
哪里出了问题?
看来您没有Values
,而是values
列,因此需要添加[]
,因为与values
函数相撞。
样本:
df = pd.DataFrame ({'values': [1,2,3,4,np.nan,8] })
print (df)
values
0 1.0
1 2.0
2 3.0
3 4.0
4 NaN
5 8.0
#return numpy array
print (df.values)
[[ 1.]
[ 2.]
[ 3.]
[ 4.]
[ nan]
[ 8.]]
#select column values
print (df['values'])
0 1.0
1 2.0
2 3.0
3 4.0
4 NaN
5 8.0
Name: values, dtype: float64
您的解决方案对我来说很好,我还将.Values
更改为['Values']
。
df1 = df.groupby('Label').filter(lambda x: x['Values'].count() > 1)
print (df1)
Label Values
0 A 1.0
1 A 2.0
3 C 4.0
4 C NaN
5 C 8.0
使用transform
和boolean indexing
的替代解决方案:
print (df.groupby('Label')['Values'].transform('count'))
0 2.0
1 2.0
2 1.0
3 2.0
4 2.0
5 2.0
Name: Values, dtype: float64
print (df.groupby('Label')['Values'].transform('count') > 1)
0 True
1 True
2 False
3 True
4 True
5 True
Name: Values, dtype: bool
print (df[df.groupby('Label')['Values'].transform('count') > 1])
Label Values
0 A 1.0
1 A 2.0
3 C 4.0
4 C NaN
5 C 8.0
另外,请检查大熊猫中的大小和计数之间的区别是什么?