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

Python 大熊猫松脂

Python 大熊猫松脂,python,pandas,Python,Pandas,我试图做到以下几点:开始应该是零,直到R列低于20,然后是正,直到R列高于80,循环应该重复(重置)。在第19行之前,行为如预期的那样,但是在第20行,Start被莫名其妙地设置为1,尽管不符合标准。添加额外的列是可以的 df = pd.DataFrame(np.random.randint(0, 100, size=100), columns=['R']) df['Start'] = np.where((df.R < 20), 1, 0) df['End'] = np.where((df

我试图做到以下几点:开始应该是零,直到R列低于20,然后是正,直到R列高于80,循环应该重复(重置)。在第19行之前,行为如预期的那样,但是在第20行,Start被莫名其妙地设置为1,尽管不符合标准。添加额外的列是可以的

df = pd.DataFrame(np.random.randint(0, 100, size=100), columns=['R'])
df['Start'] = np.where((df.R < 20), 1, 0)
df['End'] = np.where((df.R > 80), 1, 0)
df.loc[df['End'].shift().eq(0), 'Start'] = df['Start'].replace(0, np.nan).ffill().fillna(0).astype(int)
解决方案根据广亨的回答:

df = pd.DataFrame(np.random.randint(0, 100, size=100), columns=['R'])
df['Start'] = np.select([df['R'] < 20, df['R'] > 80], (1,0), np.nan)
df['Start'] = df['Start'].ffill()
df['Start'] = df.Start.combine(pd.Series(np.insert(abs(np.diff(df.Start)), 0, 0)), max, fill_value=0)
df=pd.DataFrame(np.random.randint(01000,size=100),columns=['R']))
df['Start']=np.select([df['R']<20,df['R']>80],(1,0),np.nan)
df['Start']=df['Start'].ffill()
df['Start']=df.Start.combine(pd.Series(np.insert)(abs(np.diff(df.Start)),0,0)),最大,填充值=0)

IIUC,您可以使用
np。选择

df['Start'] = np.select([df['R']>80, df['R']<20], (1,0), np.nan)
df['Start'] = df['Start'].ffill()

IIUC,您可以使用
np。选择

df['Start'] = np.select([df['R']>80, df['R']<20], (1,0), np.nan)
df['Start'] = df['Start'].ffill()

所以您只关心
start
列?start是要激活的信号,我正在尝试切片,直到满足结束条件。然后观察另一个起动条件并重复。实际上,我试图避免循环。所以您只关心
start
列?start是要激活的信号,我尝试切片,直到满足结束条件。然后观察另一个起动条件并重复。实际上,我正在努力避免循环。np.select([df['R']<20,df['R']>80],(1,0),np.nan)与我想要的非常接近,我只希望最后一个起始值(当R>80)也是正匹配。如果它是最后一个,您可以在
ffill()
之前找到并屏蔽它。无法成功使用掩码,但是一个稍微麻烦的添加工作df['Start']=df.Start.combine(pd.Series(np.insert(abs(np.diff(df.Start)),0,0)),max,fill_值=0)。然而,我会假设这有严重的性能缺陷。
df.iloc[::-1]['R'].gt(80).idxmax()
会给您提供
R>80
的类出现。应该更清楚。我指的是每件事的最后一件。所以当
R>80
时,开始列仍然有1。发布的问题中的解决方案具有预期的结果。非常感谢。np.select([df['R']<20,df['R']>80],(1,0),np.nan)非常接近我想要的,我只希望最后一个起始值(当R>80时)也是正匹配。如果它是最后一个,你可以在
ffill()
之前找到并屏蔽它。无法成功使用掩码,但添加一个稍微麻烦的值对df有效['Start']=df.Start.combine(pd.Series(np.insert(abs(np.diff(df.Start)),0,0)),max,fill_value=0)。但是,我假设这有严重的性能缺陷。
df.iloc[::-1]['R'].gt(80).idxmax()
会给你出现
R>80
。应该更清楚。我指的是每次出现的最后一次。所以当
R>80
时,开始栏仍然有1。发布的问题中的解决方案得到了预期的结果。非常感谢。
     R  Start  End
11  82    1.0    1
12  63    1.0    0
13  37    1.0    0
14  21    1.0    0
15  88    1.0    1
16   9    0.0    0
17  13    0.0    0
18  83    1.0    1
19  47    1.0    0
20  68    1.0    0
21  42    1.0    0
22  67    1.0    0
23  26    1.0    0
24  79    1.0    0
25  87    1.0    1
26  96    1.0    1
27  39    1.0    0
28  50    1.0    0
29  94    1.0    1
30  95    1.0    1