我想打印每一次不一致,其中a开始与上一行的结束不同,按“id”列分组。在以下数据中,最后一行是不一致的情况
start,end,id
0,2,1
1,5,2
2,10,1
5,7,2
7,9,2
11,13,1
我使用for循环成功地做到了这一点:
def check_consistency(df):
grouped_df = df.groupby('id')
for key, group in grouped_df:
df = pd.DataFrame()
df['start'] = group['start'].iloc[1:]
df['end'] = group['end'].shift().iloc[1:]
consistent = df['start'] == df['end']
if not all(consistent):
print(key)
print(df[consistent == False])
有没有一种方法可以在不使用for循环和创建辅助数据帧的情况下实现相同的目标
编辑:以下是预期输出
数据帧:
df = pd.DataFrame({'start': [0,1,2,5,7,11], 'end': [2,5,10,7,9,13], 'id': [1,2,1,2,2,1]})
预期产出:
1
start end
5 11 10.0
首先,我们按
id
排序。然后制作一个掩码,将每个start
与前一行end
进行比较,并按id
分组对于每个组,mask的第一个条目默认为
True
,因为它没有前一行,并且不用于我们的提取最后,我们通过使用带布尔掩码求反的
.loc
来选择掩码为False(start
不等于前一行end
)的行输出:
相关问题 更多 >
编程相关推荐