如果“时间”列等于上面的行,我正在使用的数据框有多行,“数据 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 | 错误 | 文字 |
您可以使用 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。