我想删除 pandas 数据框中特定列中重复出现的、未更改的值,前提是它们相继出现(按组单独处理),换句话说,如果它们不出现在彼此之后,则保留冗余值。
特定列(在我的例子中,是
value
列)。该组是node
。
我让它循环运行。但是Python中的循环非常慢。
有没有办法在没有循环的 pandas 中实现相同的效果?
按时间 ASC 排序的表格:
时间 | 节点 | 价值 | 评论(不在df中) |
---|---|---|---|
|
|
|
好的 |
|
|
|
好的 |
|
|
|
好的 |
|
|
|
好的 |
|
|
|
好的 |
... | ... | ... | |
|
|
|
删除 |
... | ... | ... | |
|
|
|
好的 |
... | ... | ... | |
|
|
|
好的 |
|
|
|
好的 |
|
|
|
删除 |
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)
您可以过滤掉与前一行相同的行,如下所示:
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)