从数据框中的列中获取第一个和最后一个值
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()
跳过nan
s 的衬线
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】:ffill
和 bfill
的值只取第一行和最后一行:
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() 对我不起作用