小编use*_*026的帖子

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

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

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']})
Run Code Online (Sandbox Code Playgroud)

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

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

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

在此输入图像描述

python merge dataframe pandas

3
推荐指数
1
解决办法
691
查看次数

如何填充图中不同比例的曲线之间的区域?

我有一个具有三个特征的数据框:深度、渗透性和孔隙度。我想在 y 轴上绘制 DEPTH,在 x 轴上绘制 PERMEABILITY 和 POROSITY,尽管最后两个特征具有不同的比例。

df = pd.DataFrame({'DEPTH(m)': [100, 150, 200, 250, 300, 350, 400, 450, 500, 550],
           'PERMEABILITY(mD)': [1000, 800, 900, 600, 200, 250, 400, 300, 100, 200],
           'POROSITY(%)': [0.30, 0.25, 0.15, 0.19, 0.15, 0.10, 0.15, 0.19, 0.10, 0.15]})
Run Code Online (Sandbox Code Playgroud)

我已经设法将它们绘制在一起,但现在我需要用两种不同的颜色填充曲线之间的区域。例如,当 PERMEABILITY 曲线在 POROSITY 的右侧时,它们之间的区域应该是绿色的。如果 PERMEABILITY 在左侧,则曲线之间的区域应为黄色。

f, ax1 = plt.subplots()

ax1.set_xlabel('PERMEABILITY(mD)')
ax1.set_ylabel('DEPTH(m)')
ax1.set_ylim(df['DEPTH(m)'].max(), df['DEPTH(m)'].min())

ax1.plot(df['PERMEABILITY(mD)'], df['DEPTH(m)'], color='red')
ax1.tick_params(axis='x', labelcolor='red')

ax2 = ax1.twiny()

ax2.set_xlabel('POROSITY(%)')
ax2.plot(df['POROSITY(%)'], df['DEPTH(m)'], color='blue')
ax2.tick_params(axis='x', labelcolor='blue')  
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

所以正确的输出应该是这样的:(对不起下面的 Paint 图像)

在此处输入图片说明

任何人都可以帮助我吗?

plot matplotlib fill dataframe python-3.x

1
推荐指数
1
解决办法
99
查看次数

标签 统计

dataframe ×2

fill ×1

matplotlib ×1

merge ×1

pandas ×1

plot ×1

python ×1

python-3.x ×1