【发布时间】:2019-07-31 09:14:37
【问题描述】:
我有一个如下所示的数据框:
Numbers Names
0 A
1 A
2 B
3 B
4 C
5 C
6 C
8 D
10 D
如果“名称”列中的值对于两个数字都相同,我的数字(整数)需要是连续的:例如,在 6 到 8 之间,数字不是连续的,但这很好,因为列“ Names" 从 C 变为 D。但是,在 8 到 10 之间,这是一个问题,因为两行具有相同的值 "Names",但不是连续的。
我想做一个代码,根据上面解释的逻辑返回需要添加的缺失数字。
import itertools as it
import pandas as pd
df = pd.read_excel("booki.xlsx")
c1 = df['Numbers'].copy()
c2 = df['Names'].copy()
for i in it.chain(range(1,len(c2)-1), range(1,len(c1)-1)):
b = c2[i]
c = c2[i+1]
x = c1[i]
n = c1[i+1]
if c == b and n - x > 1:
print(x+1)
它会打印两次丢失的数字,因此对于示例中的数据框,它将打印:
9
9
但我只想打印:
9
可能是逻辑有问题?
谢谢
【问题讨论】:
-
你能添加预期的结果吗?
-
我认为问题出在
itertools.chain。你为什么用它? -
@VictorRuiz 我改编自我在网上找到的解决方案,但基本上是因为我需要为范围使用两个 for 循环,并且 it.chain 让我指定两个范围(因为它是我的两列正在迭代)。但实际上,另一种解决方案会更受欢迎,因为它在 Anaconda 中运行良好,但在 IDLE 中运行良好