3

このコードを使用して、各クラスター内の各ユーザーのさまざまな品質指標の値を計算しました

>>> for name, group in df.groupby(["Cluster_id", "User"]):
...     print 'group name:', name
...     print 'group rows:'
...     print group
...     print 'counts of Quality values:'
...     print group["Quality"].value_counts()
...     raw_input()
...     

しかし今、私は出力を次のように取得します

group rows:
                tag                       user                    quality  cluster
676    black fabric  http://steve.nl/user_1002          usefulness-useful        1
708      blond wood  http://steve.nl/user_1002          usefulness-useful        1
709      blond wood  http://steve.nl/user_1002    problematic-misspelling        1
1410         eames?  http://steve.nl/user_1002      usefulness-not_useful        1
1411         eames?  http://steve.nl/user_1002  problematic-misperception        1
3649  rocking chair  http://steve.nl/user_1002          usefulness-useful        1
3650  rocking chair  http://steve.nl/user_1002  problematic-misperception        1
counts of Quality Values:
usefulness-useful            3
problematic-misperception    2
usefulness-not_useful        1
problematic-misspelling      1

私が今やりたいことは、チェック条件を持つことです。

if quality==usefulness-useful:
 good = good + 1
else:
 bad = bad + 1

私は出力を書いてみました:

counts of Quality Values:
usefulness-useful            3
problematic-misperception    2
usefulness-not_useful        1
problematic-misspelling      1

変数に入れ、変数を行ごとにトラバースしようとしましたが、機能しません。特定の行で計算を行う方法について、誰かが私に提案をしてもらえますか。

4

1 に答える 1

3

グループを取得したら、.iterrows()メソッドを使用して行ごとに繰り返すことができます。行インデックスと行自体を提供します。

In [33]: for row_number, row in group.iterrows():
   ....:     print row_number
   ....:     print row
   ....:     
676
Tag                        black fabric
User          http://steve.nl/user_1002
Quality               usefulness-useful
Cluster_id                            1
Name: 676
708
Tag                          blond wood
User          http://steve.nl/user_1002
Quality               usefulness-useful
Cluster_id                            1
Name: 708
[etc]

これらの各行は、辞書のように索引付けできます。次に例を示します。

In [48]: row
Out[48]: 
Tag                       rocking chair
User          http://steve.nl/user_1002
Quality       problematic-misperception
Cluster_id                            1
Name: 3650

In [49]: row["User"]
Out[49]: 'http://steve.nl/user_1002'

In [50]: row["Tag"]
Out[50]: 'rocking chair'

そして、ループを次のように書くことができます

good = 0
bad = 0
for row_number, row in group.iterrows():
    if row['Quality'] == 'usefulness-useful':
        good += 1
    else:
        bad += 1
print 'good', good, 'bad', bad

を与える

good 3 bad 4

それがあなたにとって理にかなっていれば、それはそれを行うための完全に良い方法です. もう 1 つの方法は、Quality列のカウントから直接作業することです。

In [54]: counts = group["Quality"].value_counts()

In [55]: counts
Out[55]: 
usefulness-useful            3
problematic-misperception    2
usefulness-not_useful        1
problematic-misspelling      1

In [56]: counts['usefulness-useful']
Out[56]: 3

悪い = 合計 - 良いので、次のようになります。

In [57]: counts.sum() - counts['usefulness-useful']
Out[57]: 4
于 2013-01-28T17:28:30.827 に答える