python - 更有效的迭代方式
问题描述
我想返回与前一列位置相比位置下降的行项目。有没有更好/更简单的方法来做到这一点?我有数据框,其中有按顺序排列的项目,并且顺序可以在下一列(周)中更改:
s1 = pd.Series(["item1", "item2", "item3"])
s2 = pd.Series(["item2", "item1", "item3"])
s3 = pd.Series(["item3","item2", "item1"])
data = pd.DataFrame({"week1":s1, "week2":s2, "week3":s3})
# I did it like this
counter1 = 0 # iterate all columns
idxfirst = 0 # manually index
idxsecond = 0 # manually index
numberofcolumns = (len(data.columns))-1
for i in range(numberofcolumns):
idxfirst = 0
for i in data.iloc[:,counter1]:
idxsecond = 0
for j in data.iloc[:,(counter1+1)]:
if i == j and idxfirst < idxsecond:
print(i)
idxsecond += 1
idxfirst +=1
counter1 +=1
prints:
item1 # because position dropped from 1 to 2 in second week
item2 # because position dropped from 1 to 2 in second week
item1 # because position dropped from 2 to 3 in third week
解决方案
您可以使用以下方法简化代码enumerate()
:
s1 = pd.Series(["item1", "item2", "item3"])
s2 = pd.Series(["item2", "item1", "item3"])
s3 = pd.Series(["item3","item2", "item1"])
data = pd.DataFrame({"week1":s1, "week2":s2, "week3":s3})
numberofcolumns = (len(data.columns))-1
for counter1,i in enumerate(range(numberofcolumns)):
for idxfirst,i in enumerate(data.iloc[:,counter]):
for idxsecond,j in enumerate(data.iloc[:,(counter+1)]):
if i == j and idxfirst < idxsecond:
print(i)
推荐阅读
- php - 如何通过第一个键检查对象数组中的重复项?
- c# - 如何在c#中遍历匿名对象
- flutter - 在颤动中全局更改应用栏形状
- movilizer - 如何在 DateTime 中修剪全年和秒
- apache-httpclient-5.x - 如何从 Apache HttpClient5 的 HttpResponse 中获取响应体?
- perl - 我如何启动一个 xterm 并在新的 xterm 中跟随 setenv?
- powerbi - Power BI - 如何在不使用 DAX 的情况下计算除法
- javascript - Nuxt 中的数据 VS 异步数据
- r - r 传单图层控件(addLayersControl)不隐藏属于组的图例
- python - 如何从 Dell.com 获取重定向 URL 列表