通过 Pandas 查找数据框中每列的最后位置

Elh*_*ham 2 python indexing pandas

我已经做了一些搜索来回答这个问题,但我无法弄清楚如何做到这一点:

我有一个包含 185 行和 30 列的数据集。并非所有行都有值。我想在每列上查找最后一个值的位置并获取该列的索引。我不确定如何执行此操作,因为当我使用下面的代码时,它给了我数据框的长度,而不仅仅是该列:

len(data_exam['col'])
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何建议。

此外,我想确保如果我想循环读取所有列,我的以下代码是否是一个不错的选择!:

 list=[]
 for col in data:
    function which find the length of column
Run Code Online (Sandbox Code Playgroud)

谢谢。

Ale*_*der 6

您可以使用 来last_valid_index查找给定列中最后一个有效值的索引位置。还有它的双胞胎,first_valid_index

# Set-up sample data.
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))

df.iloc[2:, 0] = np.nan
df.iloc[4:, 1] = np.nan
>>> df
          A         B         C
0  1.764052  0.400157  0.978738
1  2.240893  1.867558 -0.977278
2       NaN -0.151357 -0.103219
3       NaN  0.144044  1.454274
4       NaN       NaN  0.443863

# Solution to find index of last valid values per column.
>>> df.apply(lambda series: series.last_valid_index())
A    1  # <== Index of last valid data in column A.
B    3  # <== Index of last valid data in column B.
C    4  # <== Index of last valid data in column C.
dtype: int64
Run Code Online (Sandbox Code Playgroud)

  • 或者,避免使用“lambda”:“df.apply(pd.Series.last_valid_index)”。 (2认同)

Sco*_*ton 5

IIUC,你想要每列中最后一个非 nan 的值:

df[::-1].bfill().iloc[0]
Run Code Online (Sandbox Code Playgroud)

例子:

df = pd.DataFrame({'A':[1,2,3,4,np.nan],'B':[1,np.nan,np.nan,np.nan,np.nan],'C':[1,2,3,4,5]})

     A    B  C
0  1.0  1.0  1
1  2.0  NaN  2
2  3.0  NaN  3
3  4.0  NaN  4
4  NaN  NaN  5
Run Code Online (Sandbox Code Playgroud)

输出:

A    4.0
B    1.0
C    5.0
Name: 4, dtype: float64
Run Code Online (Sandbox Code Playgroud)