我想知道是否有人能帮助解释我看到的一些奇怪的循环行为-以下是我的代码:
在这部分代码中,一切都正常工作
# Loop through ref_df and run Isolation Forest models by CID
for row in ref_df.itertuples():
# Reference CID from ref_df
ref = row.CID
# Filter new_df table
ref_fil = new_df['CID']==ref
mod_df = []
mod_df = new_df[ref_fil]
mod_df = mod_df.copy()
然后,我添加了以下代码:
# Add differences between dates to mod_df
mod_df['InvoiceDate']= pd.to_datetime(mod_df['InvoiceDate'])
mod_df = mod_df.sort_values(by=['CID', 'InvoiceDate'])
prev_dates = mod_df.InvoiceDate.shift().fillna(pd.datetime(2019,10,1))
ddiff = mod_df.InvoiceDate - prev_dates
ddiff.name = 'DDiff'
mod_df = pd.concat((mod_df, ddiff), axis=1, copy=False)
<Then do something here with mod_df>
下面是代码的工作原理:
我在mod_df中看到的输出如下所示:
CID InvoiceDate DDiff DDiff DDiff
1005 18 2019-10-02 0 days 1 days 1 days
1720 18 2019-10-03 0 days 1 days 1 days
4187 18 2019-10-09 0 days 6 days 6 days
7263 18 2019-10-16 0 days 7 days 7 days
9476 18 2019-10-19 0 days 3 days 3 days
11923 18 2019-10-24 0 days 5 days 5 days
12626 18 2019-10-25 0 days 1 days 1 days
13361 18 2019-10-28 0 days 3 days 3 days
20446 18 2019-11-08 0 days 11 days 11 days
奇怪的是,输出是在一个循环之后(代码中添加了一个“break”),每次代码循环时,代码mod_df = []
都应该清除mod_df。我不知道为什么3个DDiff列被添加到mod_df?在一个循环之后,应该有一个DDiff列,当下一个循环开始时,它将与mod_df的其余部分一起清除。第一个DDiff列填充了0,这也是意外的
有人能解释一下这里可能发生的事情吗
非常感谢您的帮助
根据要求,以下是ddiff:
1005 1 days
1720 1 days
4187 6 days
7263 7 days
9476 3 days
11923 5 days
12626 1 days
根据要求,以下为参考文件:
CID OrderQty InvoiceDate
0 18 25 10/2/2019
1 1000736 40 10/14/2019
2 1015387 35 10/4/2019
3 1020700 20 10/1/2019
4 1038702 45 10/8/2019
CID=18是用于过滤上述mod_df的键
最后,找到了问题行:
在这里改名
所以,问题是,当mod_df继续将其与DDiff连接时,您运行代码的次数将附加DDiff
相关问题 更多 >
编程相关推荐