给定一个以时间戳为索引的数据帧以及包含 ID 和布尔值的 2 列,为每个 ID 获取一个带有转换布尔值的新数据帧

问题描述 投票:0回答:2

我有一个包含两列和一个索引的 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 状态,但我只想获取每种情况下的第一个转换行,如果这有意义的话?

python pandas dataframe
2个回答
0
投票

您可以比较连续的 ID(使用

ne
shift
)来识别更改,然后执行 布尔索引:

out = df[df['ID'].ne(df['ID'].shift())]

输出:

        ID    Val
TS               
8:00:12  X   True
8:01:23  Y  False
8:03:45  X  False
8:05:01  Z   True
8:07:05  Y  False

0
投票

如果需要每

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
© www.soinside.com 2019 - 2024. All rights reserved.