2017-05-24 6 views
3

に計算された行を追加し、私が持っているデータフレームの小さなサンプルである、と私はそれの底に計算された行を追加したい:私はで行を追加したいパンダは、データフレームの底部の下

sch  q1  q2  q3 
acc  Yes Yes No 
acc  Yes No  No 
acc  Yes No  No 
acc  Yes Yes Yes 

それぞれの列に対して「はい」の値の割合を私に与えて下のようになります。

sch  q1  q2  q3 
acc  Yes Yes No 
acc  Yes No  No 
acc  Yes No  No 
acc  Yes Yes Yes 
acc  1.00 0.5 0.25 

ご協力いただければ幸いです。

答えて

2

私はあなたのラムダを参照して、純粋なパンダソリューションを上げる:

df.append(df.eq('Yes').mean(), ignore_index=True) 

あなたはしないでくださいに何が起こるべきかを指定するカラムなので、無視しました。現在のソリューションでは、この列の値は0になります。

+0

これまでのところ、これは間違いなく最も簡単で簡単な解決策です。 schについては、私は同じ価値を維持したいと思います。だから、それも 'acc'でなければなりません。これをどのように含めるのですか?また、私がschでグループ化した場合、各グループの最後にこの行を追加するためにグループを繰り返し処理できますか? – Cameron

+0

「sch」によってグループ化された追加を適用したいので、私は[この回答](https://stackoverflow.com/questions/29082412/append-rows-to-a-pandas-groupby-object)のアイデアに従います)。基本的には、データフレームをグループ化し、新しいデータフレームに「yes」カウントを書き込み、元のデータフレームをグループ解除して、「yes」カウントデータフレームを追加します。 – Sebastiaan

1
df.append(df.apply(lambda x: len(x[x=='Yes'])/len(x)),ignore_index=True) 

出力:

q1 q2 q3 
0 Yes Yes No 
1 Yes No No 
2 Yes No No 
3 Yes Yes Yes 
4 1 0.5 0.25 
1

のは、転置のためpd.concatmeanto_frame、およびTを使用してみましょう。

pd.concat([df,df.replace({'Yes':True,'No':False}).mean().to_frame().T.assign(sch='acc')]) 

出力:

q1 q2 q3 sch 
0 Yes Yes No acc 
1 Yes No No acc 
2 Yes No No acc 
3 Yes Yes Yes acc 
0 1 0.5 0.25 acc 
1

には、次のアプローチを想定しています

In [11]: df.loc[len(df)] = ['acc'] + df.filter(regex='^q\d+') \ 
             .eq('Yes').mean().values.tolist() 

In [12]: df 
Out[12]: 
    sch q1 q2 q3 
0 acc Yes Yes No 
1 acc Yes No No 
2 acc Yes No No 
3 acc Yes Yes Yes 
4 acc 1 0.5 0.25 
関連する問題