我有一个包含两列和一个索引的 pandas 数据框,该索引是 datettime 对象,第一列是 ID,第二列是布尔值,对于给定 ID,布尔列对于多行和转换可以是 True 或 False在数据帧的长度上来回移动,我想获取每个 ID 的转换布尔值的第一行,我该怎么做?
示例:
TS ID Val
8:00:12 X TRUE
8:00:50 X TRUE
8:01:23 Y FALSE
8:03:45 X FALSE
8:05:01 Z TRUE
8:05:29 Z TRUE
8:06:13 Z FALSE
8:07:05 Y FALSE
应该给出:
TS ID Val
8:00:12 X TRUE
8:01:23 Y FALSE
8:03:45 X FALSE
8:06:13 Z FALSE
在整个时间序列中,不同的 ID 可以处于不同的 TRUE/FALSE 状态,但我只想获取每种情况下的第一个转换行,如果这有意义的话?
如果需要每
ID
的第一行,然后按两列删除重复项:
out = df[df['ID'].ne(df['ID'].shift())].drop_duplicates()
print (out)
ID Val
TS
8:00:12 X True
8:01:23 Y False
8:03:45 X False
8:05:01 Z True
如果数据集中有多列:
out = df[df['ID'].ne(df['ID'].shift())].drop_duplicates(subset=['ID','Val'])
print (out)
ID Val
TS
8:00:12 X True
8:01:23 Y False
8:03:45 X False
8:05:01 Z True