我有两列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],
"B": [0.25, 0.6, 1.34, 0.75, 0.16, 1.04, 0.99]})
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
df2 = pd.DataFrame({"A1": [1.06,2.34, 3.70],
"C": ["pink", "blue", "orange"]})
A1 C
0 1.06 pink
1 2.34 blue
2 3.70 orange以下是预期的结果:
df3 = pd.DataFrame({"A1":[1.06,2.34, 3.70],
"B": [0.25, 0.6, 1.04],
"C": ["pink", "blue", "orange"] })
A1 B C
0 1.06 0.25 pink
1 2.34 0.60 blue
2 3.70 1.04 orange我知道我可以合并这些数据帧,但问题是其中一个df1非常大,所以要计算A和A1列的所有可能距离需要大量的内存。所以,也许还有比这更有效率的东西?我知道这个例子并不准确,因为结果数据帧的列B包含的值与A中的A[i]-A1[j] = min|A[i]-A1[j]|行完全匹配,
然而,我需要B值作为B在A= [A[i]-5, A[i]+5]行中的最大值。
发布于 2022-05-01 15:45:00
提供的输出的逻辑是完全清楚的,但是如果要合并A/A1中最近的值,请使用pandas.merge_asof
df3 = pd.merge_asof(df2, df1.rename(columns={'A': 'A1'}),
on='A1', direction='nearest')idx±10上的条件也不清楚,但如果要设置最大距离,请使用tolerance=10
产出:
A1 C B
0 1.06 pink 0.25
1 2.34 blue 1.34
2 3.70 orange 0.16https://stackoverflow.com/questions/72078071
复制相似问题