python - 在非 NaN 的列中查找第一个和/或最后一个值的索引

标签 python pandas numpy dataframe

我正在处理来自钻孔的地下测量,其中每种测量类型涵盖不同的深度范围。在这种情况下,深度被用作索引。

我需要为每种测量类型找到第一次和/或最后一次出现的数据(非 NaN 值)的深度(索引)。

获取数据帧第一行或最后一行的深度(索引)很容易:df.index[0]df.index[-1]。诀窍在于找到任何给定列的第一个或最后一个非 NaN 出现的索引。

df = pd.DataFrame([[500, np.NaN, np.NaN,     25],
                   [501, np.NaN, np.NaN,     27],
                   [502, np.NaN,     33,     24],
                   [503,      4,     32,     18],
                   [504,     12,     45,      5],
                   [505,      8,     38, np.NaN]])
df.columns = ['Depth','x1','x2','x3']
df.set_index('Depth')

enter image description here

理想的解决方案是为第一次出现的 x1 生成 503 的索引(深度),为第一次出现的 x2 生成 502,为最后一次出现的 x3 生成 504。

最佳答案

first_valid_index () 和 last_valid_index() 可以使用。

    >>> df
             x1    x2    x3
    Depth
    500     NaN   NaN  25.0
    501     NaN   NaN  27.0
    502     NaN  33.0  24.0
    503     4.0  32.0  18.0
    504    12.0  45.0   5.0
    505     8.0  38.0   NaN
    >>> df["x1"].first_valid_index()
    503
    >>> df["x2"].first_valid_index()
    502
    >>> df["x3"].first_valid_index()
    500
    >>> df["x3"].last_valid_index()
    504

关于python - 在非 NaN 的列中查找第一个和/或最后一个值的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57293506/

相关文章:

python - 如何从USB运行Python?

python - 特定日期的 Pandas 数据框重采样

python - Databricks:如何从 R Dataframe 切换到 Pandas Dataframe(R 到 python 在同一笔记本中)

python - 在 double_scalars 中遇到除以零进行导数计算

python - 这种NumPy列表理解的捷径

python - 查找一个数据框中每行的前 n 个值,并使用这些索引获取另一个数据框中的值以执行成对操作

python - "ValueError: sleep length must be non-negative"在线程中

python - 如何同时验证多个 wtform 字段以满足条件

python - 使用 Flask-Security 对 REST API 进行身份验证

python - Pandas 对多列进行排序