我想返回与上一列位置相比位置下降的行项目。是否有更好/更简单的方法来做到这一点?我有一个数据帧,其中有按顺序排列的项目,下一个列(周)中的顺序可以更改:
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
这是一种通过完全矢量化的方式完成此操作的方法,方法是“融合”数据帧,将其连接到自身,然后寻找满足以下三个条件的行:
df = data.reset_index().melt(id_vars="index")
df["week"] = df.variable.str.replace("week", "").astype(int)
df = df[["index", "value", "week"]]
df = pd.merge(df.assign(dummy = 1), df.assign(dummy=1), on = "dummy")
df[(df.value_x == df.value_y) & (df.week_x + 1 == df.week_y) & (df.index_x < df.index_y)]["value_x"]
输出:
4 item1
34 item2
44 item1
Name: value_x, dtype: object
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句