【发布时间】:2017-01-23 13:29:17
【问题描述】:
我必须使用双 for 循环来循环遍历数据以将一行数据与其他行进行比较。我必须对每一行都这样做。
不幸的是,我的真实数据长达数百万行,并且循环需要很长时间才能处理。
有没有办法避免使用双 for 循环?由于我只对比较 Date1 和 date2 的相似事物感兴趣 - 我想我可以 groupby Thing 并将双 for 循环应用于每个组?
但我不知道如何写这个,因为 len(grouped) 有一个复杂性。还有很多行“数量”=0,因此这些行不需要包含在计算中。提前感谢您的帮助。
d={'Thing':['Thing1','Thing2','Thing1','Thing2','Thing5'],'Date1' :
['01-01-2016','02-02-2015','03-03-2015','03-03-2015', '24-03-2016'], 'Date2' : ['04-04-2015','03-03-2014','05-04-2015','07-03-2015','03-04-2016'],
'Quantity':[1,1,1,1,0]}
data=pd.DataFrame(d)
data['Level']=0
for i in range(0,len(data)):
for j in range(i+1,len(data)):
if data['Thing'][i] == data['Thing'][j] and data['Date1'][i] >= data['Date1'][j]
and data['Date1'][i] < data['Date2'][j] and data['Quantity']==1:
data['Level'][i]=data['Level'][i]+1
data['Level'][j]=data['Level'][j]+1
【问题讨论】:
-
你想做什么??应该比较或更新什么代码或?..
-
经验法则:如果您发现自己在 pandas 中使用
for循环,那么您很可能做错了什么。 -
首先,永远不要在 pandas 中使用普通的
for-loops,总是使用内置的迭代器,例如iterrows并使用loc或iloc索引您的行。 -
Date1 表示到达,date2 表示离开 - 对于每一行,我想知道当这个项目(行)时,还有多少相同类型的事物仍有库存(已到达但尚未离开)到达。这更清楚吗?感谢您的帮助。
标签: python pandas for-loop group-by