删除 pandas dataframe 时间序列列中未更改的值

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

我想删除 pandas 数据框中特定列中重复出现的、未更改的值,前提是它们相继出现(按组单独处理),换句话说,如果它们不出现在彼此之后,则保留冗余值。

特定列(在我的例子中,是

value
列)。该组是
node

我让它循环运行。但是Python中的循环非常慢。

有没有办法在没有循环的 pandas 中实现相同的效果?

按时间 ASC 排序的表格:

时间 节点 价值 评论(不在df中)
2024-05-07 13:39:31.315437
ns=4;i=6
NaN
好的
2024-05-07 13:39:31.327564
ns=4;i=7
5,514E+09
好的
2024-05-07 13:39:31.328585
ns=4;i=8
1
好的
2024-05-07 13:39:31.425523
ns=4;i=9
33
好的
2024-05-07 13:39:31.561920
ns=4;i=10
False
好的
... ... ...
2024-05-07 14:30:31.425454
ns=4;i=9
33
删除
... ... ...
2024-05-07 15:20:45.445578
ns=4;i=9
34
好的
... ... ...
2024-05-07 18:24:34.142277
ns=4;i=10
33
好的
2024-05-07 18:24:40.245277
ns=4;i=9
33
好的
2024-05-07 18:24:45.845477
ns=4;i=9
33
删除
node_values = {}
rows_to_delete = []
for index, row in df.iterrows():
    if row['node'] in node_values and node_values[row['node']] == row['value']:
        rows_to_delete.append(index)
    node_values[row['node']] = row['value']
df = df.drop(index=rows_to_delete)
python pandas dataframe
1个回答
0
投票

您可以过滤掉与前一行相同的行,如下所示:

filter= (df['node'] != df['node'].shift())

并且只挑选满足条件的数据

filtered_df = df[filter]

更新

根据您的评论,您想要删除值(在值列中)相同的节点,您可以尝试下面的代码来执行此操作。

df = pd.DataFrame(data)

filter_= df.groupby('node')['value'].shift() == df['value']

filtered_df = df[~filter_]

print(filtered_df)
© www.soinside.com 2019 - 2024. All rights reserved.