Python 在大熊猫中发现重叠片段
我有两个数据帧A和B,列Python 在大熊猫中发现重叠片段,python,numpy,pandas,data-analysis,Python,Numpy,Pandas,Data Analysis,我有两个数据帧A和B,列['start','end','value'],但行数不同。我想为A中的每一行设置值,如下所示: A.iloc(i) = B['value'][B['start'] < A[i,'start'] & B['end'] > A[i,'end']] A.iloc(i)=B['value'][B['start']A[i,'end'] 对于每个i,有可能有多行B满足此条件,在这种情况下,结果将是对应行的max或sum。如果没有满足A.iloc[i]的值,则
['start','end','value']
,但行数不同。我想为A中的每一行设置值,如下所示:
A.iloc(i) = B['value'][B['start'] < A[i,'start'] & B['end'] > A[i,'end']]
A.iloc(i)=B['value'][B['start']A[i,'end']
对于每个i,有可能有多行B满足此条件,在这种情况下,结果将是对应行的max或sum。如果没有满足A.iloc[i]的值,则不应更新或将设置为默认值0(任何一种方式都可以)
我很想找到最有效的方法。将numpy作为np导入
import numpy as np
np.random.seed(1)
lenB = 10
lenA = 20
B_start = np.random.rand(lenB)
B_end = B_start + np.random.rand(lenB)
B_value = np.random.randint(100, 200, lenB)
A_start = np.random.rand(lenA)
A_end = A_start + np.random.rand(lenA)
#if you use dataframe
#B_start = B["start"].values
#B_end = ...
mask = (A_start[:, None ] > B_start) & (A_end[:, None] < B_end)
r, c = np.where(mask)
result = pd.Series(B_value[c]).groupby(r).max()
print result
np.随机种子(1)
lenB=10
lenA=20
B_start=np.random.rand(lenB)
B_end=B_start+np.random.rand(lenB)
B_值=np.random.randint(100200,lenB)
A_start=np.random.rand(lenA)
A_end=A_start+np.random.rand(lenA)
#如果您使用dataframe
#B_start=B[“start”]。值
#结束=。。。
掩码=(A_开始[:,无]>B_开始)和(A_结束[:,无]
您想根据您的布尔条件设置数据框A的值列,对吗?@EdChum是的,但A和B的行数不相同。请使用新注释更新您的问题,因为它可以进一步澄清问题,还解释了在A或B中的行数较少的情况下,如何合并行。该解决方案非常优雅,但对于大型阵列来说,它占用了大量内存。