我有两个数据帧df1和df2。
df1有两列。我想从idx找到row的索引df1,它在col1中包含了与df2 col1值的最小距离。
接下来,我想从df1 col2中找到neighborhood [idx-10, idx+10]的最大值。然后将该值附加到df2,并将其附加到找到最小距离的相应行。
以下是两个数据框架的示例:
df1 = pd.DataFrame({"A": [1,1.5,2.5,3,3.5,3.95,4.55,5.1, 5.54, 6.02, 6.57],
"B": [0.25, 0.6, 1.34, 0.75, 0.16, 1.04, 0.99, 0.23, 0.95, 0.65,0.22]})
A B
0 1.00 0.25
1 1.50 0.60
2 2.50 1.34
3 3.00 0.75
4 3.50 0.16
5 3.95 1.04
6 4.55 0.99
7 5.10 0.23
8 5.54 0.95
9 6.02 0.65
10 6.57 0.22
df2 = pd.DataFrame({"A1": [1.06, 2.34, 3.70, 6, 7.2], "C": ["pink", "blue", "orange", "pink", "orange"]})
A1 C
0 1.06 pink
1 2.34 blue
2 3.70 orange
3 6.00 pink
4 7.20 orange为了方便起见,我将选择区间[idx-2;idx+2]。以下是预期的结果:
df3 = pd.DataFrame({"A1":[1.06,2.34, 3.70, 6, 7.2], "B": [1.34, 1.34, 1.04, 0.95, 0.95], "C": ["pink", "blue", "orange",
"pink", "orange"]})
A1 B C
0 1.06 1.34 pink
1 2.34 1.34 blue
2 3.70 1.04 orange
3 6.00 0.95 pink
4 7.20 0.95 orange我知道我可以合并这些数据帧,但问题是其中一个df1非常大,所以要计算A和A1列的所有可能距离需要大量的内存。所以,也许还有比这更有效率的东西?
发布于 2022-05-04 15:40:17
假设df1已经在A列上排序,那么让我们使用searchsorted在A中获取与来自A1的值相对应的最近值的索引,然后确保剪切索引值等于df1长度的索引。现在,在df1.B上做一个居中滚动最大值,最后使用最近的索引在一个间隔内得到相应的最大值。
i = np.searchsorted(df1['A'], df2['A1'], side='right')
i[i == len(df1)] -= 1
w = 2
r = df1['B'].rolling(2 * w + 1, center=True, min_periods=1).max()
df2['B'] = r.iloc[i].tolist() A1 C B
0 1.06 pink 1.34
1 2.34 blue 1.34
2 3.70 orange 1.04
3 6.00 pink 0.95
4 7.20 orange 0.95https://stackoverflow.com/questions/72113727
复制相似问题