当前位置: 首页 > 知识库问答 >
问题:

从dataframe中的列中获取第一个和最后一个值

柯建修
2023-03-14

例如,从下面的代码

    import pandas as pd
    
    #create DataFrame
    df = pd.DataFrame({'T1': [nan, 12, 15, 23, 19, 23, 25, 29, nan, nan, 0, nan, nan, 0],
                       'T2': [nan, nan, 7, 7, 9, 12, 9, 9, nan, 0, nan, nan, nan, nan],
                       'T3': [nan, nan, nan, nan, 11, 8, 10, 6, 6, 5, 9, 12, nan, nan]})
    
    
    #view DataFrame
    df
    
        T1     T2   T3
    0   NaN    NaN  NaN
    1   12     NaN  NaN
    2   15     7    NaN
    3   23     7    NaN
    4   19     9    11
    5   23     12   8
    6   25     9    10
    7   29     9    6
    8   NaN   NaN   6
    9   NaN    0    5
    10  0     NaN   9
    11  NaN   NaN   12
    12  NaN   NaN   NaN
    13  0     NaN   NaN

The output that I wish to get is 
the first and last value of T1 thus - [12,0]
the first and last value of T2 thus - [7,0]
the first and last value of T3 thus - [11,12]

这只是一个示例数据集,我有一个包含6000行的数据框,我想找到每列的第一个和最后一个值,其中我还有NaN作为值。我也不知道我的第一个值或最后一个值的索引。

我试过了

  • df。iloc[-1,0]

很少有人来自Link1,Link2,但没有任何成功。我还想得到第一个元素,而不是最小值。

共有3个答案

丁慈
2023-03-14

ffillbill的值然后只取第一行和最后一行:

result = df.bfill().ffill()[::df.shape[0]-1]

输出:

      T1   T2    T3
0   12.0  7.0  11.0
13   0.0  0.0  12.0

现在,您可以使用iat

result.iat[0,0], result.iat[-1,0]
#output:
(12.0, 0.0)

PS:总是建议使用iat来访问特定行和列索引处的值。

梅跃
2023-03-14

可以使用~df.isna()选择非NaN的列。

df[~df['T1'].isna()].iloc[0, 0]
df[~df['T1'].isna()].iloc[0, 0]

...等等

公西修文
2023-03-14

我不确定这是否是最有效的方法。但是这里有一个使用pd的简单单行程序。数据帧。isna()跳过nans

first, last = df.T1[~df.T1.isna()].values[[0, -1]]
 类似资料:
  • 问题内容: 我有按日期索引的熊猫。有许多列,但仅在部分时间序列中填充了许多列。我想找到非值第一个和最后一个值的位置,以便提取日期并查看特定列的时间序列有多长时间。 有人能指出我正确的方向,如何去做这样的事情吗?提前致谢。 问题答案: @ behzad.nouri的解决方案完美工作,返回第一个和最后不使用Series.first_valid_index和Series.last_valid_index

  • 问题内容: 如何在where子句中使用下个月的第一天和最后一天? 问题答案: 采用:

  • 如果我有一个双打数组: 我想得到第一个元素和最后一个元素,这样 我该怎么做?

  • 问题内容: 我正在尝试编写这样的日历功能 是整数(1、2、3 …),$ day是一天(Sun,Mon,…)或数字,以较容易的一个为准。方向有些混乱,因为它进行了不同的计算。 举个例子 它使用默认值,并获得5月的第一个星期日,即2009-05-03。如果我们打电话 ,它将返回5月的第二个最后一个星期日,即2009-05-24。 问题答案: 也许可以使其更快。。。 代码非常有趣。 请注意,前进1表示反

  • 问题内容: 有没有办法只分割列表中的第一项和最后一项? 例如; 如果这是我的清单: 我 想 这样做(显然是无效的语法): 我尝试过的一些方法: 问题答案: 单程: 更好的方法(不使用切片,但更易于阅读):

  • 我使用的是Apache Spark,它的数据帧如下所示: 我想按字段分组,以获得的所有历元时间戳。然后我想按时间戳升序对历代进行排序,然后取第一个和最后一个历代。 我使用了下面的查询,但是和历元值似乎是按照它们在原始数据帧中出现的顺序获取的。我想把第一个和最后一个从一个有序的升序中取出来。 如何从按升序历元排序的历元列表中检索第一个和最后一个历元?