gpt4 book ai didi

python - 如何通过列的近似值组合/合并数据帧?

转载 作者:行者123 更新时间:2023-12-05 01:29:27 26 4
gpt4 key购买 nike

这是一个更大数据的例子。想象一下,我有两个像这样的数据框:

import pandas as pd
import numpy as np

np.random.seed(42)
df1 = pd.DataFrame({'Depth':np.arange(0.5, 4.5, 0.5),
'Feat1':np.random.randint(20, 70, 8)})

df2 = pd.DataFrame({'Depth':[0.4, 1.1, 1.5, 2.2, 2.8],
'Rock':['Sand','Sand','Clay','Clay','Marl']})

它们的大小不同,我想将 df2 中“Rock”列的信息作为新列放在 df1 上。这种组合应该基于这两个数据帧的“深度”列来完成,但它们具有不同的采样率。 df1遵循0.5的恒定步长,但df2的厚度不同。

所以我想根据“深度”的近似值合并这些信息。例如:如果 df2 的样本的“深度”为 2.2,则查看 df1 的最接近“深度”的值,该值应为 2.0,并在该样本上添加“岩石”信息(“粘土”)。重要的是要说“Rock”值可以在新列上重复,以避免丢失该分段内的数据。谁能帮帮我?

我已经尝试了一些 pandas 方法,如“merge”和“combine_first”,但无法获得我想要的结果。它应该是这样的:

enter image description here

最佳答案

使用merge_asof :

df3 = pd.merge_asof(df1, df2, on='Depth', tolerance=0.5, direction='nearest')

df3:

   Depth  Feat1  Rock
0 0.5 58 Sand
1 1.0 48 Sand
2 1.5 34 Clay
3 2.0 62 Clay
4 2.5 27 Clay
5 3.0 40 Marl
6 3.5 58 NaN
7 4.0 38 NaN

完整的工作示例:

import numpy as np
import pandas as pd

np.random.seed(42)
df1 = pd.DataFrame({
'Depth': np.arange(0.5, 4.5, 0.5),
'Feat1': np.random.randint(20, 70, 8)
})

df2 = pd.DataFrame({
'Depth': [0.4, 1.1, 1.5, 2.2, 2.8],
'Rock': ['Sand', 'Sand', 'Clay', 'Clay', 'Marl']
})

df3 = pd.merge_asof(df1, df2, on='Depth', tolerance=0.5, direction='nearest')

print(df3)

关于python - 如何通过列的近似值组合/合并数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67778368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com