2016-09-07 19 views
1

私は皆様からの助けを必要としています 私はExcelのデータフォームを使用していますので、基本的に今のようなものがあります。パンダでデータフレーム内の特定の行を削除します

csr id ac otc tm lease maint 
1 456 b 0 0 0  0 
1 543 a 0 1 1  0 
1 435 e 0 0 0  0 
2 123 w 1 1 1  1 
2 123 g 0 0 0  0 
3 987 j 0 0 0  0 
4 258 k 1 1 1  1 
4 258 m 0 0 0  0 

だから私は、「OTC」「TM」「リース」「のmaint」列にゼロで行を削除する必要があります。私はこのようなことをする

df = pd.read_excel(xlsx,'Sheet1') 
df_zero = df[(df['OTC'] == 0) & (df['TM'] == 0) & (df['Lease'] == 0) & (df['Maint'] == 0) & (df['Support'] == 0) & (df['Other'] == 0)] 

このようにして、ファイルを開き、特定の列にゼロを含むすべての行をdf_zeroに保存します。その後

df1 = df_zero.loc[:, 'CSR'] 

基本的にこれは、特定の列にゼロを持つ行に対してCSR番号DF1で保存し、この

csr 
1 
1 
2 
3 
4 

のようなので、私はこれを行う、[OK]を考えると問題は解決しました。

for n1 in df1: 
    df = df[df.CSR != n1] 

しかし、ここで問題は、私は「の」、私はそれらの3を削除することを実行した場合、我々は、異なる3つの行を持っているあなたは、私はちょうど削除する必要があるCSR 1に見ることができるように、あります( 'otc' 'tm' 'lease' 'maint')にゼロを持つもの。

私が見つけた値が0であれば、CSRで動いているとか、もう1つは動いていると思うのですが、同じ行にある "tm"同じ列の「リース」と「メイント」に、この列のいずれかがゼロでない場合は、次のCSRにジャンプします。この例では、 CSR 1はすべて削除されます(「otc '' tm '' lease '' maint '')が0であるため、次のCSRに再びジャンプしますが、この場合は 'otc'ではゼロになりますが1を 'tm'に入れて、次のCSRに戻る必要がありますが、すべての列( 'otc' 'tm' 'lease' 'maint')は0になっていますので、最後のCSRまで...

私はうまくいくかもしれないが、私はそれを実装するためにいくつかの問題を抱えていると思います。悪い英語

答えて

2

また、あなたは興味を持っている4つの列を抽出し、それが行ごとに持っているどのように多くのゼロカウントとインデックスの論理ベクトルを作成することができます。

df[(df[['otc', 'tm', 'lease', 'maint']] == 0).sum(axis = 1) < 4] 

# csr id ac otc tm lease maint 
# 1 1 543 a 0  1  1  0 
# 3 2 123 w 1  1  1  1 
# 6 4 258 k 1  1  1  1 
+1

私は次のようにしています: 'df [〜(dt ['' otc '、' tm '、' lease '、' maint ']] == 0).all(1)]'または ' df [(df [['otc'、 'tm'、 'lease'、 'maint']]!= 0).any(1)] ' – MaxU

+1

@MaxU 2番目のオプションを追加します。ええ、それは良い選択だと思います。 – Psidom

+0

@Psidom感謝の仲間は私のために働く。 –

1

てくれてありがとうと申し訳ありませんが、これを試してみてください。

In [35]: df.eval('otc == 0 and tm == 0 and lease == 0 and maint == 0') 
Out[35]: 
0  True 
1 False 
2  True 
3 False 
4  True 
5  True 
6 False 
7  True 
dtype: bool 

In [36]: df[~df.eval('otc == 0 and tm == 0 and lease == 0 and maint == 0')] 
Out[36]: 
    csr id ac otc tm lease maint 
1 1 543 a 0 1  1  0 
3 2 123 w 1 1  1  1 
6 4 258 k 1 1  1  1 
関連する問題