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

我使用这段代码获取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]来获取特定列的第一个元素和最后一个元素。

有没有更合适的方法呢?


扬帆大鱼
浏览 63回答 2
2回答

青春有我

要获取列的第一个和最后一个元素,您的选择已经是最有效/正确的方法。为了获得第一行,我个人更喜欢使用 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,:]

幕布斯7119047

你的出路要么是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:03upload_time_add_8hour_last   19    10/7/2020 13:04
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python