在Pandas中寻找重叠的部分

时间:2014-07-07 05:07:44

标签: python numpy pandas data-analysis

我有两个pandas DataFrames A和B,列['start', 'end', 'value']但行数不同。我想按如下方式为A中的每一行设置值:

A.iloc(i) = B['value'][B['start'] < A[i,'start'] & B['end'] > A[i,'end']]

对于每个i,存在多行B满足该条件的可能性,在这种情况下,相应行的max或总和将是结果。如果没有满足A.iloc[i]的值,则不应更新或设置为默认值0(两种方式都可以)

我有兴趣找到最有效的方法。

1 个答案:

答案 0 :(得分:0)

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