Python:与熊猫数据帧

时间:2016-03-29 13:22:20

标签: python pandas dataframe

我有一个数据框,我想确定ser_noCTRY_NM何时相同且不同。但是,我想要注意ser_no更改,不要将false和false返回true或false / true return false。

考虑以下数据框:

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而不是进行逻辑比较?

1 个答案:

答案 0 :(得分: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