2016-09-08 14 views
1

オリジナルDATAFRAME(df1が)のように見えているドロップ行:私はindex = NoDemande, NoUsager, Periodscolumns = ['Sens']と新しいもの(df2)を生成するためにcrosstabを使用パイソン&パンダ - 列の値を別のデータフレームのインデックス値

NoUsager Sens NoAdresse Fait Weekday NoDemande Periods 
0 000001 + 000079 1  Dim 42191000972 Soir 
1 001875 + 005018 1  Dim 42191001052 Matin 
2 001651 + 005018 1  Dim 42191001051 Matin 
3 001486 + 000405 1  Dim 42191001250 Matin 
4 002021 + 005712 1  Dim 42191000013 Matin 
5 001975 + 005712 1  Dim 42191000012 Matin 
6 001304 + 001408 1  Dim 42191000371 Matin 
7 001355 + 005021 1  Dim 42191000622 Matin 
8 002274 + 006570 1  Dim 42191001053 Matin 
9 000040 + 004681 1  Dim 42191002507 Soir 

私は列 NoUsagerNoDemandeの値がINDE内の1つのと同じです df1からすべての行をドロップしたい
     Sens + - 
NoDemande NoUsager Periods 
42191000622 001355 Matin 1 2 
42191000959 001877 Matin 1 2 
42191001325 000627 Soir  1 2 
42191001412 000363 Matin 1 2 
42191001424 000443 Soir  1 2 
42191001426 001308 Soir  1 2 
42191002507 000040 Soir  2 0 
42193000171 000257 Soir  1 2 
42193000172 002398 Soir  1 2 

x NoUsagerおよびNoDemandedf2に設定します。その結果、新しいデータフレームdf3が返され、df1フォーマットと同じですが、line7line9は含まれません。

私が試した:

df3 = df1.loc[~df1['NoDemande','NoUsager'].isin([df2.NoDemande,df2.NoUsager])] 

をしかし、それは返さ:KeyError: ('NoDemande', 'NoUsager')

どのように私はこの問題を解決することができますか?

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

答えて

2
cols = ['NoDemande','NoUsager'] 
mask = df1[cols].isin(df2.reset_index()[cols].to_dict('list')) 
df1[~mask.all(1)] 

enter image description here


あなたは間違ってやっていた三つのことがありました。

  1. df1['NoDemande','NoUsager']ニーズdf1[['NoDemande','NoUsager']]

  2. df2['NoDemande','NoUsager']とインデックス・レベルを持つことができます。インデックスをリセットして列に戻す必要があります。

  3. この目的でisinを使用する場合は、df2.reset_index()[['NoDemande','NoUsager']]を辞書に変換します。

+0

ニースの答え。しかし、 'df [[NoUsemer '、' NoDemande ']]を実行しない理由がありますか?isin(df2.reset_index()[[' NoUsager '、' NoDemande ']])all(axis = 1)' ? 'to_dict'はここで何を与えるのでしょうか? –

+0

@AmiTavoryはい、私の直感に反して、あなたが提案したものは動作しません。私はなぜ何かを説明することを書こうとします。 – piRSquared

+0

@piRSquaredこの素敵な答えをありがとう。したがって、列とインデックスを比較することは不可能ですか? – ch36r5s

関連する問題