2017-12-30 14 views
-1

私は郡で候補者投票のためのdfを持っています。 > 100(列合計)の総votationと(X 1192 600)Iは、総votation> 50(行の和)を有する候補を選択するために、元のDFをサブセットする必要dfを行の和と列の和でサブセット化する

とCountys

私は元のデータに候補者、郡によって合計を持っていない。

import pandas as pd 
import numpy as np 


df1 = pd.DataFrame([["cand1", 10,100, 1, 1000, 10, 100],["cand2",20,1000, 2, 20, 0, 20],["cand3", 30,5000, 3, 30, 0, 3], ["cand4",40, 1, 4, 1, 0, 4], ["cand5",50, 50, 0,20, 0,2]], 
        columns=['candidate',"code", 'county1', 'county2', 'county3', 'county4', 'county5']) 
df1 

、結果がでなければなりません:

df2 = pd.DataFrame([["cand1", 10,100, 1000, 100],["cand2",20,1000, 20, 20],["cand3",30, 5000, 30, 3], ["cand5",50, 50, 20, 2]], 
        columns=['candidate',"code", 'county1', 'county3', 'county5']) 
df2 

私は私の問題を解決するためにあなたの助けをいただければ幸いです

答えて

2

ブールインデックスの使用:

df1.set_index(['candidate', 'code']).loc[ 
    lambda x: x.sum(axis=1) > 50, lambda x: x.sum(axis=0) > 100 
] 

ラムダは、オペレータチェーンを可能にするがあればあなたももっとクリーンな方法を望む

df1 = df1.set_index(['candidate', 'code']) 
df1.loc[df1.sum(axis=1) > 50, df1.sum(axis=0) > 100] 

両方が候補とコード列はデータフレームのインデックスである

   county1 county3 county5 
candidate code       
cand1  10  100  1000  100 
cand2  20  1000  20  20 
cand3  30  5000  30  3 
cand5  50   50  20  2 

をもたらします。通常の列として使用する場合は、最後にreset_index()に電話をかけることができます。