2016-03-29 11 views
0

私はser_noCTRY_NMが同じで異なっていると判断したいデータフレームを持っています。しかし、私はser_noの変更を心に留めて、偽と偽の戻り値をtrueにしたり、false/trueの戻り値をfalseにしたりしないようにします。Python:pandaのデータフレームの列との論理比較

は、次のデータフレームを考えてみましょう:

import pandas as pd 
df = pd.DataFrame({'ser_no': [1, 1, 1, 2, 2, 2, 2, 3, 3, 3], 
       'CTRY_NM': ['a', 'a', 'b', 'e', 'e', 'a', 'b', 'b', 'b', 'd']}) 
def check(key): 
    return df[key] == df[key].shift(1) 

match = check('ser_no') == check('CTRY_NM') 

これが返されます。

enter image description here

をしかし、指標で、4と8我々は、シリアル番号の変更を持っています。各シリアル番号は異なるマシンであるため、これらの場所で論理比較を行うことは意味がありません。 ser_noが変更された場合、どうすれば論理比較を行う代わりにNaNを挿入できますか?

+0

あなたはおそらく最初)(GROUPBY使用します。 –

+0

@CorleyBrigmanあなたはgroupbyがどのように役立つかを詳しく説明できますか? – dustin

答えて

2

これはあなたが欲しいものですか?

def check(data, key): 
    mask = data[key].shift(1) == data[key] 
    mask.iloc[0] = np.nan 
    return mask 

df.groupby(by=['ser_no']).apply(lambda x: check(x, 'CTRY_NM')) 

結果

ser_no 
1  0 NaN 
     1  1 
     2  0 
2  3 NaN 
     4  1 
     5  0 
     6  0 
3  7 NaN 
     8  1 
     9  0 
Name: CTRY_NM, dtype: float64 
+0

それは私が達成しようとしていたものです。何が起こっているのかをテキストで追加できますか? – dustin

関連する問題