我的问题是我的数据框(df1)包含start
和stop
列,然后是counter
列。我有一个单独的数据框(df2),其中包含value
和count
列。我想在df1中找到start
和stop
包含df2的value
的行,然后将df2的count
添加到df1。这两个数据帧将有不同的行,不会被订购。
我已经通过df2逐行写了一个循环,但它太慢了所以我想知道是否有一种我可以做的连接或合并。谢谢您的帮助。
import pandas as pd
df1 = pd.DataFrame()
df1['start'] = range(1,11)
df1['stop'] = range(2,12)
df1['count'] = [0]*10
#df1:
# start stop count
#0 1 2 0
#1 2 3 0
#2 3 4 0
#3 4 5 0
#4 5 6 0
#5 6 7 0
#6 7 8 0
#7 8 9 0
#8 9 10 0
#9 10 11 0
df2 = pd.DataFrame()
df2['count'] = range(21,26)
df2['value'] = [x + 0.5 for x in range(1,6)]
#df2:
# count value
#0 21 1.5
#1 22 2.5
#2 23 3.5
#3 24 4.5
#4 25 5.5
#Line below doesn't work, throws:
#ValueError: Can only compare identically-labeled Series objects
df1[df2[(df1.start < df2.value) & (df2.value < df1.stop)], 'count'] += df2.count
#desired update of df1:
# start stop count
#0 1 2 21
#1 2 3 22
#2 3 4 23
#3 4 5 24
#4 5 6 25
#5 6 7 0
#6 7 8 0
#7 8 9 0
#8 9 10 0
#9 10 11 0
答案 0 :(得分:3)
searchsorted
查找要插入的位置。 6
进入区间[6, 7)
。这由参数side='left'
side='right'
假设6
进入间隔(5, 6]
df1.loc[
df1.index[df1.start.searchsorted(df2.value) - 1],
'count'
] += df2['count'].values
start stop count
0 1 2 21
1 2 3 22
2 3 4 23
3 4 5 24
4 5 6 25
5 6 7 0
6 7 8 0
7 8 9 0
8 9 10 0
9 10 11 0