誰かがすでに解決策を投稿しているので、バラエティのため にパンダdefaultdict
をあげます。データ処理に非常に便利なライブラリです。他の優れた機能の中でも、必要な出力の種類に応じて、このカウントの問題を1行で処理できます。本当に:pandas
df = pd.read_csv("cluster.csv")
counted = df.groupby(["Cluster_id", "User", "Quality"]).size()
df.to_csv("counted.csv")
-
pandas
簡単にするためのトレーラーを提供するために、ファイルをロードできます。のメインデータストレージオブジェクトpandas
は「DataFrame」と呼ばれます。
>>> import pandas as pd
>>> df = pd.read_csv("cluster.csv")
>>> df
<class 'pandas.core.frame.DataFrame'>
Int64Index: 500000 entries, 0 to 499999
Data columns:
Tag 500000 non-null values
User 500000 non-null values
Quality 500000 non-null values
Cluster_id 500000 non-null values
dtypes: int64(1), object(3)
最初の数行が正常に見えることを確認できます。
>>> df[:5]
Tag User Quality Cluster_id
0 bbb u001 bad 39
1 bbb u002 bad 36
2 bag u003 good 11
3 bag u004 good 9
4 bag u005 bad 26
次に、Cluster_idとUserでグループ化し、各グループで作業を行うことができます。
>>> 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 name: (1, 'u003')
group rows:
Tag User Quality Cluster_id
372002 xxx u003 bad 1
counts of Quality values:
bad 1
group name: (1, 'u004')
group rows:
Tag User Quality Cluster_id
126003 ground u004 bad 1
348003 ground u004 good 1
counts of Quality values:
good 1
bad 1
group name: (1, 'u005')
group rows:
Tag User Quality Cluster_id
42004 ground u005 bad 1
258004 ground u005 bad 1
390004 ground u005 bad 1
counts of Quality values:
bad 3
[etc.]
ファイルの処理をたくさん行う場合はcsv
、一見の価値があります。