我有两个1和0的数组:
a = [1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]
b = [0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1]
字符串
我想确保“1”总是“跳跃”数组,因为我从左到右,从来没有出现在同一个数组中两次,然后才出现在另一个数组。
a = [1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]
b = [0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
型
我可以使用pandas和迭代来实现:
df = pd.DataFrame({"A": a, "B": b, })
df2 = df[(df.A > 0) | (df.B > 0)]
i = 0
for idx in df2.index:
try:
if df2.at[idx, 'A'] == df2.at[df2.index[i + 1], 'A']:
df.at[idx, 'A'] = 0
if df2.at[idx, 'B'] == df2.at[df2.index[i + 1], 'B']:
df.at[idx, 'B'] = 0
i += 1
except IndexError:
pass
型
但是效率不高。我如何将其矢量化以使其更快?
1条答案
按热度按时间w80xi6nr1#
IIUC,尝试:
字符串
印刷品:
型
编辑:逐步解释:
只保留行中任何地方有
1
值的索引:型
印刷品:
型
我们看到我们只需要A和B之间交替变化的索引(所以我们需要在这里去掉索引
16
)。我们知道
B
必须交替,所以我们移动B
列并进行比较:型
索引
16
的值为False
,所以我们只保留其他索引:型
打印最终的df。