【发布时间】:2013-12-05 03:58:42
【问题描述】:
数据中有几列,三列分别命名为“candidate_id”、“enddate”、“TitleLevel”。
在同一id内,如果enddate相同,我会删除下一级记录。
例如,给定:
candidate_id startdate enddate TitleLevel
1 2012.1.1 2013.5.1 2
1 2011.1.1 2013.5.1 4
1 2008.12.1 2010.1.1 3
2 2010.10.1 2012.12.1 2
我想要的是:
candidate_id startdate enddate TitleLevel
1 2011.1.1 2013.5.1 4
1 2008.12.1 2010.1.1 3
2 2010.10.1 2012.12.1 2
我将删除candidate_id=1、enddate=2013.5.1和titlelevel=2。
我想出了一个循环。
for i in range(nrow-2,-1, -1):
if (JobData['enddate'][i] == JobData['enddate'][i+1]
and JobData['candidate_id'][i] == JobData['candidate_id'][i+1]
and pd.notnull(JobData['enddate'][i]):
if JobData['TitleLevel'][i] > JobData['TitleLevel'][i+1]:
JobData= JobData.drop(i+1)
else:
JobData= JobData.drop(i)
循环确实需要一些时间来删除冗余行。有更快的方法吗?
【问题讨论】:
-
如果你能在代码中给出一些测试数据,你会更容易回答你的问题。话虽如此,groupby 非常好用。只需记住在将数据列表传递给函数之前对其进行排序
-
不仅仅是熊猫。我只是想找到一种方法来加速代码,而不使用 for 循环和 if else。测试数据在“说”下面。在candidate_id=1,enddate=2013.5.1,我想删除TitleLevel较低的行。
-
@user3013706,是的,但是用
pandas标记非常有帮助,因为熟悉它的人会看到你的问题 -
@user3013706 当你使用pandas时,可以根据pandas api给你建议,而不仅仅是使用一般的python内置
-
这段代码的目的是建立一个统计模型。所以我使用熊猫读入 csv 文件。好的,我会把“熊猫”放在标签里:)