2

グループ化しているフィールドに 3 つ以上のエントリを持つアイテムのみを含む groupby オブジェクトを返そうとしています。たとえば、次のオブジェクトがあり、グループ化するとし'Letters'ます。

Letters Numbers Items Bool
A       1       lamp  1
B       2       glass 1
B       2       table 1
C       5       pic   0
B       3       glass 0
C       4       bottle 1
C       2       horse 0

次に、私のコードは b を持つ groupby オブジェクトのみを返します

私は次のことを試しました:

old_df = a_df.groupby('Letters')
new_df = old_df.filter(len(old_df['Letters'])>2)

ここで言及されているいくつかのラムダのものも試しました:パンダでグループ化された df のフィルタリング

ありがとう!


では、1 文字あたりのエントリ数が 3 を超える場合に、1 文字あたりの Bool のすべての値の合計を持つベクトルを返したい場合は、どうすればよいでしょうか? 提供されたデータを使用すると、これは [2,1] (B の場合は 2、C の場合は 1) になります。

4

1 に答える 1

3

の出力を誤解していると思いますgroupby

In [4]: df
Out[4]:
  Letters  Numbers  Items  Bool
0       A        1   lamp     1
1       B        2  glass     1
2       B        2  table     1
3       C        5    pic     0
4       B        3  glass     0

In [6]: df.groupby('Letters').filter(lambda x: len(x) > 2)
Out[6]:
  Letters  Numbers  Items  Bool
1       B        2  glass     1
2       B        2  table     1
4       B        3  glass     0

操作の結果として得られるgroupbyオブジェクトは反復可能なオブジェクトであり、その「反復数」はグループ ラベルの と、グループに対応するtupleオリジナルのサブセットです。DataFrame例えば、

In [9]: for name, subset in df.groupby('Letters'):
   ...:     print(name)
   ...:     print(subset)
   ...:     print('\n')
   ...:
A
  Letters  Numbers Items  Bool
0       A        1  lamp     1


B
  Letters  Numbers  Items  Bool
1       B        2  glass     1
2       B        2  table     1
4       B        3  glass     0


C
  Letters  Numbers Items  Bool
3       C        5   pic     0

各グループのメンバー数が 2 より大きいBoolbyの値を合計するには:Letter

In [39]: df.groupby('Letters').filter(lambda x: len(x) > 2).groupby('Letters').Bool.sum()
Out[39]:
Letters
B          2
C          1
Name: Bool, dtype: int64
于 2013-10-18T01:55:16.013 に答える