Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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_Pandas_Dataframe_Data Science - Fatal编程技术网

Python 滚动条件数据帧列

Python 滚动条件数据帧列,python,pandas,dataframe,data-science,Python,Pandas,Dataframe,Data Science,我如何才能将滚动条件应用于熊猫中的列 import pandas as pd import numpy as np lst = np.random.random_integers(low = -10, high = 10, size = 10) lst2 = np.random.random_integers(low = -10, high = 10, size = 10) #lst = [ -2 10 -10 -6 4 2 -5 4 9 3] #lst2

我如何才能将滚动条件应用于熊猫中的列

import pandas as pd
import numpy as np    

lst = np.random.random_integers(low = -10, high = 10, size = 10)
lst2 = np.random.random_integers(low = -10, high = 10, size = 10)

#lst = [ -2  10 -10  -6   4   2  -5   4   9   3]
#lst2 = [-7  5  6 -4  7  1 -4 -6 -1 -4]
df = pandas.DataFrame({'a' : lst, 'b' : lst2})
给定一个数据帧,即'df',我想创建一个列'C',如果a>0和b>0中的元素显示为True,如果a<0和b<0,则显示为False

对于不满足此条件的行,我希望将前一行中的条目滚动到当前条目(即,如果前一行的值为'True',但不满足指定的条件,则其值应为'True'

我该怎么做


后续问题:如果条件a>1和b>1返回True或a<-1和b<-1返回False,我将如何执行此操作?

我更喜欢在符号上添加一点数学符号

i = np.sign(df.a)
j = np.sign(df.b)

i = i.mask(i != j).ffill()
i >= 0

# for your `lst` and `lst2` input 
0    False
1     True
2     True
3    False
4     True
5     True
6    False
7    False
8    False
9    False
Name: a, dtype: bool

只要您不必担心整数溢出,这就可以了。

对于第一个不满足条件的条目,这是有效的,但是,当我尝试将该条件用于整个数据帧时,它没有重新应用该条件。@ZivLotzky对此表示抱歉。。。现在试试?不完全是。。。如果a>0和b>0,则返回True;如果a<0和b<0,则返回False。但是,当满足任一条件时,您的代码将返回True,当两者都不满足时,代码将返回False。相反,如果不满足某个条件,我希望返回先前的结果。例如,如果第1行返回False,但第2行不满足任何条件,它也应该返回False。作为后续问题,对于条件a>1和b>1返回True或a<-1和b<-1返回False,我将如何执行此操作?这可能是不同的答案,因为您没有大于或等于0的统一条件@coldspeed@ZivLotzky是的,我想答案会不同。。。你想再问一个问题吗?是的,这就是我最后想到的。。。抱歉重试,本周一brain有点慢。。。刷新页面。
i = np.sign(df.a)
j = np.sign(df.b)

i.mask(i != j).ffill().ge(0)