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