2017-01-31 7 views
2

私は以下のようなデータフレームを持っている:python pandasの特定の列の値を数えるには?

df1_data = {'sym' :{0:'AAA',1:'BBB',2:'CCC',3:'AAA',4:'CCC',5:'DDD',6:'EEE',7:'EEE',8:'FFF'}, 
     'identity' :{0:'AD',1:'AD',2:'AU',3:'AU',4:'AU',5:'AZ',6:'AU',7:'AZ',8:'AZ'}} 

私は私のデータフレーム内SYM列をチェックしたいです。私の意図は、2つの異なるファイルを生成することです.1つは異なる2つの列を異なる順序で含み、2つ目のファイルにはsym、sym_count、AD_count、AU_count、neglected_countの各列が含まれています。

編集1から

私は(AD & AU)以外のアイデンティティを避けたいです。どちらの出力ファイルでも、私はAD & AUの結果を望んでいません。 neglected_countカラムはオプションです。

期待Result-

result.csv

sym,identity 
AAA,AD 
AAA,AU 
BBB,AD 
CCC,AU 
CCC,AU 
EEE,AU 

result_count.csv

私はPythonのパンダに計算のようなタイプを実行するにはどうすればよい
sym,sym_count,AD_count,AU_count,neglected_count 
AAA,2,1,1,0 
BBB,1,1,0,0 
CCC,2,0,2,0 
EEE,2,0,1,1 

答えて

2

私は、列名に、第1の位置とadd_suffixsum列を追加するために、あなたがinsertcrosstabが必要だと思います。

最後に書き込みto_csv

df1_data = {'sym' :{0:'AAA',1:'BBB',2:'CCC',3:'AAA',4:'CCC',5:'DDD',6:'EEE',7:'EEE',8:'FFF'}, 
     'identity' :{0:'AD',1:'AD',2:'AU',3:'AU',4:'AU',5:'AZ',6:'AU',7:'AZ',8:'AZ'}} 
df = pd.DataFrame(df1_data, columns=['sym','identity']) 
print (df) 
    sym identity 
0 AAA  AD 
1 BBB  AD 
2 CCC  AU 
3 AAA  AU 
4 CCC  AU 
5 DDD  AZ 
6 EEE  AU 
7 EEE  AZ 
8 FFF  AZ 

#write to csv 
df.to_csv('result.csv', index=False) 
#need vals only in identity 
vals = ['AD','AU'] 

#replace another values to neglected 
neglected = df.loc[~df.identity.isin(vals), 'identity'].unique().tolist() 
neglected = {x:'neglected' for x in neglected} 
print (neglected) 
{'AZ': 'neglected'} 

df.identity = df.identity.replace(neglected) 

df1 = pd.crosstab(df['sym'], df['identity']) 
df1.insert(0, 'sym', df1.sum(axis=1)) 
df2 = df1.add_suffix('_count').reset_index() 
#find all rows where is 0 in columns with vals 
mask = ~df2.filter(regex='|'.join(vals)).eq(0).all(axis=1) 
print (mask) 
0  True 
1  True 
2  True 
3 False 
4  True 
5 False 
dtype: bool 

#boolean indexing 
df2 = df2[mask] 
print (df2) 
identity sym sym_count AD_count AU_count neglected_count 
0   AAA   2   1   1    0 
1   BBB   1   1   0    0 
2   CCC   2   0   2    0 
4   EEE   2   0   1    1 

df2.to_csv('result_count.csv', index=False) 
+0

それは動作します。 result.csvのソリューションですか? – kit

+0

result_count.csvとresult.csvの編集1.要件が少し変更されていますを参照してください。私はresult.csvがresult_count.csvではないと言った。注意深く読んでください。 – kit

+0

私の解決策をチェックしてください。 – jezrael

関連する問題