2017-03-09 16 views
1

:私はF1の値の何をカウントするpandasデータフレーム列の一致するアイテムの数を他の列から数えるにはどうすればよいですか?この小さなデータフレームで

d1 = pd.read_csv('to_count.mcve.txt', sep='\t') 

pos M1   M2  F1 
23 A,B,A,C,D A,C,B A 
24 A,B,B,C,B A,B,A B 
28 C,B,C,D,E B,C  E 

は、M1とM2です。学習プロセスとして、私はそれを細かく分割しました。

pos M1 M2 F1 
23 2 1 1 
24 3 1 1 
28 1 0 1 

私が試した何を::私は(完全にかかわらず、機能していない)のいずれかの方法を使用しますが、プロセスを学びたいと思うことができますいずれか

d1 = d1.set_index(['pos'], append=True) # to set the pos value aside for simplicity 

最終的な出力を期待

その後:これはエラーメッセージを投げて1行に

d1_count = d1.apply(lambda x: d1.count(d1['F1'])) 

を直接、カウントを行います。私はそれが間違っていることを知っている。 私のアプローチには何が間違っていますか?どうすればより良い仕事をすることができましたか?

(いずれかまたはすべての方法について)説明付きの提案がありがとうございます。

答えて

2

あなたは出現数カウントするデータフレームの行とstr.count方法をループにapplyメソッドを使用することができます:あなたはpos以外のすべての列をカウントしたい場合

df[['M1', 'M2']] = df.apply(lambda x: x.loc['M1':'M2'].str.count(x.F1), 1) 
df 

# pos M1 M2 F1 
#0 23 2 1 A 
#1 24 3 1 B 
#2 28 1 0 E 

を:

df.set_index('pos').apply(lambda x: x.str.count(x.F1), 1).reset_index() 

# pos M1 M2 F1 
#0 23 2 1 1 
#1 24 3 1 1 
#2 28 1 0 1 
+0

あなたが提案したものは良いです。しかし、私は多くの列を持っているときに問題があります。私はその列を全く言及しないことを望みます。 – everestial007

+0

出力を少し変更しました。 ''列 'に言及せずに単に' F1'の値を読むことができれば、後で 'F1'を落として前のデータフレームから追加することができます。それを動作させる方法はありますか? – everestial007

+0

私はあなたが何を意味するか分かりません。たぶん列の位置を使用しますか? – Psidom

関連する問題