2017-11-20 1 views
1

私はパンダを初めて使っています。誰かが各列の値の頻度を計算する際に助けてくれますか?各列のPythonパンダカウントの発生数

DATAFRAME:

id|flag1|flag2|flag3| 
--------------------- 
1 | 1 | 2 | 1 | 
2 | 3 | 1 | 1 | 
3 | 3 | 4 | 4 | 
4 | 4 | 1 | 4 | 
5 | 2 | 3 | 2 | 

私が何か

id|flag1|flag2|flag3| 
--------------------- 
1 | 1 | 2 | 2 | 
2 | 1 | 1 | 1 | 
3 | 2 | 1 | 0 | 
4 | 1 | 1 | 2 | 

のような説明たい - ID 1はFLAG1で1つの値、FLAG2で2つの値とFLAG3で2つの値を持ちます。

この点で助けてもらえますか?

+0

なぜ 'id' 5は無視されるべきですか?最後の行は '5 | 0 | 0 | 0'となる可能性があります。 – RomanPerekhrest

+0

idが使用されていないため、無視されます。列の値は特定のIDに属していることを表していないので、数値を表しています。これらの数値に基づいて分類する必要があります –

答えて

2

filterまたはid列を削除してからapply機能value_countsによる最初のフィルタだけflag列を、最後int秒に0キャストにNaN秒を置き換える:

df = df.filter(like='flag').apply(lambda x: x.value_counts()).fillna(0).astype(int) 
print (df) 
    flag1 flag2 flag3 
1  1  2  2 
2  1  1  1 
3  2  1  0 
4  1  1  2 

または:

df = df.drop('id', 1).apply(lambda x: x.value_counts()).fillna(0).astype(int) 
print (df) 
    flag1 flag2 flag3 
1  1  2  2 
2  1  1  1 
3  2  1  0 
4  1  1  2 

感謝あなた、Bharathの提案:

df = df.filter(like='flag').apply(pd.Series.value_counts()).fillna(0).astype(int) 
+0

ありがとうたくさんの男 –

+2

ここで 'lambda'は必要ありません。' pd.Series.value_counts '、ここで使用https://stackoverflow.com/questions/46863602/find-value-counts-within-a-pandas-dataframe-of-strings/46863713#46863713 – Dark

+0

はい、それは別の解決策です... – jezrael

関連する問題