如何根据不同列中上面单元格的条件删除行中的单元格值?

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

如果“时间”列等于上面的行,我正在使用的数据框有多行,“数据 1”、“数据 2”和“数据 3”列中包含重复信息。每行的“消息 1”和“消息 2”列中都有唯一的信息,因此我不想删除整行。我想保留数据框的行,但根据“时间”列是否与上面的行匹配来删除重复信息,保留数据的第一个实例,理想情况下用空字符串“”替换重复值。

这是我的数据集的示例:

时间 消息1 消息2 数据1 数据2 数据3
11:38:24 通知 文字 A1 A2 A3
11:38:25 错误 文字 B1 B2 B3
11:38:26 留言 文字 C1 C2 C3
11:38:27 错误 文字 D1 D2 D3
11:38:27 通知 文字 D1 D2 D3
11:38:27 错误 文字 D1 D2 D3
11:38:28 留言 文字 E1 E2 E3
11:38:28 通知 文字 E1 E2 E3
11:38:28 错误 文字 E1 E2 E3

我已尝试以下操作,但收到错误“KeyError: '无法使用单个 bool 来索引 setitem'”

condition = df['Time'].shift(1).str == ['Time']
df.loc[condition, 'Data 1'] = ''
df.loc[condition, 'Data 2'] = ''
df.loc[condition, 'Data 3'] = ''

我的目标是让数据框反映以下内容:

时间 消息1 消息2 数据1 数据2 数据3
11:38:24 通知 文字 A1 A2 A3
11:38:25 错误 文字 B1 B2 B3
11:38:26 留言 文字 C1 C2 C3
11:38:27 错误 文字 D1 D2 D3
11:38:27 通知 文字
11:38:27 错误 文字
11:38:28 留言 文字 E1 E2 E3
11:38:28 通知 文字
11:38:28 错误 文字
python pandas dataframe
1个回答
0
投票

您可以使用 shift() 方法将每个“时间”值与上一行的值进行比较

condition = df['Time'] == df['Time'].shift()
df.loc[condition, ['Data 1', 'Data 2', 'Data 3']] = ''
print(df)

df['Time'] == df['Time'].shift() 对于“Time”值与上一行相同的行计算结果为 True。

© www.soinside.com 2019 - 2024. All rights reserved.