为了账号安全,请及时绑定邮箱和手机立即绑定

获取数据帧第一行的正确方法是什么?

获取数据帧第一行的正确方法是什么?

扬帆大鱼 2023-12-29 17:13:04
我使用这段代码获取dataframe中速度为0的数据,然后根据纬度、经度、年、月和日对dataframe进行分组。分组后,获取每组的第一个upload_time_add_8hour和最后一个。如果第一组和最后一组upload_time_add_8hour相差超过5分钟,则获取每组的第一行数据,最后将这些数据保存到csv中。upload_time_add_8hourupload_time_add_8hour我认为我的代码不够简洁。我用来df_first_row  = sub_df.iloc[0:1,:]获取数据框中的第一行,我使用upload_time_add_8hour_first = sub_df['upload_time_add_8hour'].iloc[0]和upload_time_add_8hour_last = sub_df['upload_time_add_8hour'].iloc[-1]来获取特定列的第一个元素和最后一个元素。有没有更合适的方法呢?
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

要获取列的第一个和最后一个元素,您的选择已经是最有效/正确的方法。

为了获得第一行,我个人更喜欢使用 DataFrame.head(1),因此对于您的代码,如下所示:

df_first_row  = sub_df.head(1)

我没有研究 head() 方法在 Pandas 中是如何定义的及其性能影响,但在我看来,它提高了可读性并减少了与索引的一些潜在混淆。

在其他示例中,您可能还会找到sub_df.iloc[0],但此选项将返回 ,pandas.Series其中包含 DataFrame 列名称的索引。 sub_df.head(1)将返回一个 1 行 DataFrame,其结果与sub_df.iloc[0:1,:]


查看完整回答
反对 回复 2023-12-29
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

你的出路要么是groupby().agg要么df. agg


如果您需要它,您可以根据设备


#sub_df.groupby('device_id')['upload_time_add_8hour'].agg(['first','last'])



sub_df.groupby('device_id')['upload_time_add_8hour'].agg([('upload_time_add_8hour_first','first'),('upload_time_add_8hour_last ','last')]).reset_index()



device_id upload_time_add_8hour_first    upload_time_add_8hour_last 

0       1101              10/1/2020 0:03             10/7/2020 13:04

如果您不希望按照设备使用它,也许可以尝试


sub_df['upload_time_add_8hour'].agg({'upload_time_add_8hour_first': lambda x: x.head(1),'upload_time_add_8hour_last': lambda x: x.tail(1)})


upload_time_add_8hour_first  0      10/1/2020 0:03

upload_time_add_8hour_last   19    10/7/2020 13:04


查看完整回答
反对 回复 2023-12-29
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信