我有一个数据框,我想确定ser_no
和CTRY_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')
返回:
但是,在索引4和8处,我们有序列号更改。由于每个序列号都是不同的机器,因此在这些位置进行逻辑比较是没有意义的。当ser_no
更改时,如何插入NaN
而不是进行逻辑比较?
答案 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