1. ホーム
  2. python

[解決済み] 'numpy.ndarray' オブジェクトに 'count' 属性がありません。

2022-02-17 19:41:28

質問

以下のようなDataFrameがあります。

df  = pd.DataFrame({'Label': list('AABCCC'), 'Values':  [1,2,3,4,np.nan,8] })

最小限のアイテム数(1個以下)でないグループを落としたいので、以下を試してみました。

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

こちらもチェック pandasのsizeとcountの違いは何ですか?