Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有多个条件的滚动时间窗口不同计数_Python_Python 3.x_Pandas - Fatal编程技术网

Python 具有多个条件的滚动时间窗口不同计数

Python 具有多个条件的滚动时间窗口不同计数,python,python-3.x,pandas,Python,Python 3.x,Pandas,所以,我有一个这样的数据帧: A,B,C,D foo,something,2019-01-04 09:56:01,True bar,something,2019-01-05 8:15:09,True bar,something,2019-01-05 10:15:10,False bar,something,2019-01-07 10:15:10,False baz,something,2019-02-07 10:15:38,True bar,somethingelse,2019-02-09 11

所以,我有一个这样的数据帧:

A,B,C,D
foo,something,2019-01-04 09:56:01,True
bar,something,2019-01-05 8:15:09,True
bar,something,2019-01-05 10:15:10,False
bar,something,2019-01-07 10:15:10,False
baz,something,2019-02-07 10:15:38,True
bar,somethingelse,2019-02-09 11:42:16,False
foo,something,2019-05-04 11:44:56,True
foobar,something,2019-07-15 13:23:09,True
foo,something,2019-08-04 11:44:56,False
foobar,something,2019-08-05 13:23:09,False
foobarbaz,something,2019-08-05 13:23:10,True
我想计算两个新列:

首先,在一个滚动时间窗口(比如2天)内“A”的先前不同值的数量,其中“B”的值与考虑中的行(包括计数中考虑中的行)的值相同

其次,在同一滚动时间窗口内“A”的先前不同值的数量,其中“B”的值与当前行的值相同,“D”的值为“真”

因此,期望的输出将是:

A,B,C,D,F,G
foo,something,2019-01-04 09:56:01,True,1,1
bar,something,2019-01-05 8:15:09,True,2,2
bar,something,2019-01-05 10:15:10,False,2,2
bar,something,2019-01-07 10:15:10,False,1,1,0
baz,something,2019-02-07 10:15:38,True,1,1
bar,somethingelse,2019-02-09 11:42:16,False,1,0
foo,something,2019-05-04 11:44:56,True,1,1,1
foobar,something,2019-07-15 13:23:09,True,1,1
foo,something,2019-08-04 11:44:56,False,1,0
foobar,something,2019-08-05 13:23:09,False,2,0
foobarbaz,something,2019-08-05 13:23:10,True,3,1
关于第一部分(计算栏F),我的答案是:

df["F"] = pd.factorize(df["A"])[0]
result = df.groupby("B").rolling("2D", on="C").F.apply(lambda x: len(np.unique(x)))
然后我可以将其重新合并到B列和C列上的df中(C中的日期时间都是不同的)。它给出了期望的结果

但是对于G列,我找不到解决方案。在应用上述相同的两行之前过滤df(df.loc[df.D])不是正确的解决方案,因为“D”为“False”的行仍然可以具有其为“True”的先前行。 因此,通过该方法(合并后)获得的输出为:

A,B,C,D,F,G
foo,something,2019-01-04 09:56:01,True,1,1
bar,something,2019-01-05 8:15:09,True,2,2
bar,something,2019-01-05 10:15:10,False,2,NaN
bar,something,2019-01-07 10:15:10,False,1,1,NaN
baz,something,2019-02-07 10:15:38,True,1,1
bar,somethingelse,2019-02-09 11:42:16,False,1,NaN
foo,something,2019-05-04 11:44:56,True,1,1
foobar,something,2019-07-15 13:23:09,True,1,1
foo,something,2019-08-04 11:44:56,False,1,NaN
foobar,something,2019-08-05 13:23:09,False,2,NaN
foobarbaz,something,2019-08-05 13:23:10,True,3,1
非NaN值是正确的,但我不能只填充NaN()(与期望的输出进行比较),因此该方法似乎有缺陷


感谢您的帮助。

为什么您的输入数据在
E
列中包含所有
NaN
?在提交之前删除了一个不相关的列,但忘记删除标题。固定的。