我有一个列表如下:
list_1 = [12, 15, 18, 21, 6, 9, 7, 21, 38, 62, 65, 68, 81, 21, 25, 96, 101, 8, 11]
存在值距离相等的元素序列。在此列表中,该距离为 3
,例如 12, 15, 18, 21
。
如何用新值(例如 -1)替换每个序列/子列表的偶数位置元素的值。输出将是:
list_2 = [12, -1, 18, -1, 6, -1, 7, 21, 38, 62, -1, 68, 81, 21, 25, 96, 101, 8, -1]
最佳答案
使用diff()
s = pd.Series(list_1)
s.loc[(s.diff() == 3) & (s.index % 2 == 1)] = -1
产生
[12, -1, 18, -1, 6, -1, 7, 21, 38, 62, 65, -1, 81, 21, 25, 96, 101, 8, 11]
现在,如果您想要与这些序列的每个独立相关的偶数位置,请使用 groupby
和 cumcount
s.loc[s.groupby(s.diff().ne(3).cumsum()).cumcount() % 2 == 1] = -1
产生
[12, -1, 18, -1, 6, -1, 7, 21, 38, 62, -1, 68, 81, 21, 25, 96, 101, 8, -1]
差异将是示例中的最后一个 -1
。第一个解决方案假定 11
不应被替换,因为它在 list_1
中的位置不均匀。第二个解决方案假设它应该被替换,因为它位于子列表 [8, 11]
中的偶数位置。
关于python - 如何按顺序查找和替换偶数位置元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61615757/