从数据框中的列中获取第一个和最后一个值

Posted

技术标签:

【中文标题】从数据框中的列中获取第一个和最后一个值【英文标题】:Get the first and last value from column in dataframe 【发布时间】:2021-09-05 02:57:22 【问题描述】:

我想获取每列的第一个值和最后一个值,它是一个有效值,表示整数或浮点值。

例如下面的代码

    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] df['T1'].iloc[0]

还有一些来自Link1、Link2 的其他人,但没有任何成功。 我也想得到第一个元素而不是最小值。

【问题讨论】:

请解释为什么the first and last value of T1 thus - [12,0] 中的第二个值是0。生成的数据框与您在数据框中显示的完全不同。 @Don'tAccept:感谢您指出这一点,这只是一个示例案例,我没有认真地进行精确复制,我只是添加了值以在旅途中显示示例!现已更正此问题 【参考方案1】:

我不确定这是否是最有效的方法。但这里有一个简单的使用pd.DataFrame.isna() 跳过nans 的衬线

first, last = df.T1[~df.T1.isna()].values[[0, -1]]

【讨论】:

【参考方案2】:

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

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

...等等

【讨论】:

感谢@Teshan Shanuka J 的上述回答更适合我。【参考方案3】:

ffillbfill 的值只取第一行和最后一行:

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 访问特定行和列索引处的值。

【讨论】:

这似乎是一个不错的方法。只是为此,我不想分发数据框的结构,因为 NaN 值对应于另一列。所以原则上,T1、T2、T3 是 Y 值列的 x 值。 @Himanshupatel,这实际上并没有改变原始数据框。

以上是关于从数据框中的列中获取第一个和最后一个值的主要内容,如果未能解决你的问题,请参考以下文章

逻辑操作:从数据框中的列中选择两个值

如何从包含文本的熊猫数据框中的列中提取年份(或日期时间)

如何从熊猫数据框中的列中删除字符串值

我正在尝试在另一个数据框的列中查找数据框中的列的元素,但 index() 对我不起作用

如何从python中的pandas数据框中的列中提取关键字(字符串)

将数据解析/反透视到熊猫数据框中的列中