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

Python 如何在数据帧中添加互补间隔

Python 如何在数据帧中添加互补间隔,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个100个样本的信号L=100 在这个信号中,我发现了一些我标记为“OK”的间隔。间隔存储在如下所示的数据帧中: c = pd.DataFrame(np.array([[10,26],[50,84]]),columns=['Start','End']) c['Value']='OK' 如何在另一个数据帧中添加互补间隔以获得类似的结果 d = pd.DataFrame(np.array([[0,9],[10,26],[27,49],[50,84],[85,100]]),columns

假设我有一个100个样本的
信号
L=100

在这个信号中,我发现了一些我标记为“OK”的间隔。间隔存储在如下所示的数据帧中:

c = pd.DataFrame(np.array([[10,26],[50,84]]),columns=['Start','End'])
c['Value']='OK'
如何在另一个数据帧中添加互补间隔以获得类似的结果

 d = pd.DataFrame(np.array([[0,9],[10,26],[27,49],[50,84],[85,100]]),columns=['Start','End'])
 d['Value']=['Check','OK','Check','OK','Check']
我认为你需要:

d = pd.merge(d, c, how='left')
d['Value'] = d['Value'].fillna('Check')
print (d)
   Start  End  Value
0      0    9  Check
1     10   26     OK
2     27   49  Check
3     50   84     OK
4     85  100  Check
编辑:

您可以对新的
df
使用with和
DataFrame
构造函数。替换列最后需要使用by
dict

s = np.sort(np.concatenate([[0], c['Start'].values, c['End'].values + 1]))
e = np.sort(np.concatenate([c['Start'].values - 1, c['End'].values, [100]]))
d =  pd.DataFrame(np.column_stack([s,e]), columns=['Start','End'])
d = pd.merge(d, c, how='left').fillna({'Value':'Check'})
print (d)
   Start  End  Value
0      0    9  Check
1     10   26     OK
2     27   49  Check
3     50   84     OK
4     85  100  Check
编辑1:

对于
d
,由
loc
添加了新值,由和重新调整到
系列。上次创建
df
返回人:

我认为你需要:

d = pd.merge(d, c, how='left')
d['Value'] = d['Value'].fillna('Check')
print (d)
   Start  End  Value
0      0    9  Check
1     10   26     OK
2     27   49  Check
3     50   84     OK
4     85  100  Check
编辑:

您可以对新的
df
使用with和
DataFrame
构造函数。替换列最后需要使用by
dict

s = np.sort(np.concatenate([[0], c['Start'].values, c['End'].values + 1]))
e = np.sort(np.concatenate([c['Start'].values - 1, c['End'].values, [100]]))
d =  pd.DataFrame(np.column_stack([s,e]), columns=['Start','End'])
d = pd.merge(d, c, how='left').fillna({'Value':'Check'})
print (d)
   Start  End  Value
0      0    9  Check
1     10   26     OK
2     27   49  Check
3     50   84     OK
4     85  100  Check
编辑1:

对于
d
,由
loc
添加了新值,由和重新调整到
系列。上次创建
df
返回人:


您可以使用第一个数据帧创建第二个数据帧,然后像建议的@jezrael那样进行合并:

d = pd.DataFrame({"Start":[0] + sorted(pd.concat([c.Start , c.End+1])), "End": sorted(pd.concat([c.Start-1 , c.End]))+[100]} )
d = pd.merge(d, c, how='left')
d['Value'] = d['Value'].fillna('Check')
d = d.reindex_axis(["Start","End","Value"], axis=1)
输出

    Start   End Value
0   0       9   Check
1   10     26   OK
2   27     49   Check
3   50     84   OK
4   85    100   Check

您可以使用第一个数据帧创建第二个数据帧,然后像建议的@jezrael那样进行合并:

d = pd.DataFrame({"Start":[0] + sorted(pd.concat([c.Start , c.End+1])), "End": sorted(pd.concat([c.Start-1 , c.End]))+[100]} )
d = pd.merge(d, c, how='left')
d['Value'] = d['Value'].fillna('Check')
d = d.reindex_axis(["Start","End","Value"], axis=1)
输出

    Start   End Value
0   0       9   Check
1   10     26   OK
2   27     49   Check
3   50     84   OK
4   85    100   Check

谢谢jezrael,但我的问题是我没有数据帧d,我不知道如何从CHMM开始创建它,那么它就更复杂了。请给我一些时间。谢谢jezrael,但我的问题是我没有数据帧d,我不知道如何从CHMM开始创建它,那么它就更复杂了。请给我一些时间。谢谢,有没有想过先“开始”再“结束”作为专栏?谢谢,有没有想过先“开始”再“结束”作为专栏?