我有两个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(两种方式都可以)
我有兴趣找到最有效的方法。
答案 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