如何删除具有列条件的连续行重复项?

时间:2019-12-19 11:33:09

标签: python-3.x pandas loops

This post对于获取我想做的基础非常有帮助,但是,我仍然坚持如何到达终点。

我有大型数据框(约1万行),前几行看起来就像我称之为df_a:

zone  | value   
0     | 12
1     | 12
2       99
3       12
0       12
1       12
2       12
3       99

但是,我基于区域的条件,希望将连续的重复项放入“值”内。例如,在上面的代码段中,我希望将zone = 1的第二个'12'删除。这样我最终得到:

zone  | value   
0     | 12
1     | 12
2       99
3       12
2       12
3       99

最初的想法是在区域列表中使用循环,根据区域名称自动为每个创建的区域创建新变量,然后运行我的放置重复代码(基于this answer。)不起作用:

data_category_range = df_a['zone'].unique()
data_category_range = data_category_range.tolist()

for i,value in enumerate(data_category_range):
    data_category_range['zone_{}'.format(i)] = df_a[df_a['zone'] == value]

   # de-duplicate
   cols = ["zone","value"]
   de_dup = df_a[cols].loc[(df_a[cols].shift() != df_a[cols]).any(axis=1)]

(此循环位于另一个循环中,该循环将跨具有不同“区域”值的数据框进行迭代,因此变量必须是动态的,因为我了解这不是最佳实践,因此可以选择其他方式。)

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用drop_duplicates

import pandas as pd

data = pd.DataFrame(
    {"zone": [0, 1, 2, 3, 0, 1, 2, 3], "value": [12, 12, 99, 12, 12, 12, 12, 99]}
)
data.drop_duplicates(["zone", "value"])

这会给你

|    |   zone |   value |
|---:|-------:|--------:|
|  0 |      0 |      12 |
|  1 |      1 |      12 |
|  2 |      2 |      99 |
|  3 |      3 |      12 |
|  6 |      2 |      12 |
|  7 |      3 |      99 |