【问题标题】:Sorting pandas df doesn't work对熊猫 df 进行排序不起作用
【发布时间】:2018-12-17 06:32:31
【问题描述】:

我目前正在研究从 pdf 导入的 pandas df。该数据框仅包含 2 列和大约 15000 行。我需要对第一行的这个df升序进行排序,然后将该行的较低值减去同一行的所有其他值。第一个问题是我无法正确排序我的数据框...... 当然,我在网络和 stackoverflow 上搜索了答案,当然我也阅读了有关我正在使用的功能的 pandas 信息。这是我的代码:

import pandas as pd
import numpy as np

#import data
dataframe=pd.read_csv('time_and_followers_2.csv', index_col=None)
dataframe.timestamps = dataframe.timestamps.astype(int)

#sort data by first column and get informations needed
sorted_df=dataframe.sort_values(by=['timestamps'])
init_time=sorted_df.at[0,'timestamps']
total_rows = sorted_df.shape[0]

#retrieve initial time to all first column data
sorted_df['timestamps']= sorted_df['timestamps']-init_time
sorted_df.loc[-1] = [init_time,total_rows]  # adding a row
sorted_df.to_csv('time_and_followers_2_sorted.csv', header=False, index=False)

这是 csv 文件的第一行:

timestamps,followers

1531137667.0,336

1531137650.0,189

1531137638.0,227

1531137617.0,58

1531137616.0,3314

任何帮助将不胜感激......

【问题讨论】:

  • 您是如何得出排序不正确的结论的?您打印的是df 还是dataframe
  • 你能提供一个最低限度的例子吗?
  • 你说你想按行降序排序,这正是你的代码所做的。您还想按列排序吗?如果要按列排序,则必须在 sort_values 方法中指定 axis=1,根据文档:pandas.pydata.org/pandas-docs/stable/generated/…
  • 已排序,我不知道你为什么要在sorted_df=dataframe.sort_values('timestamps', ascending=False)中明确设置ascending=False作为标志,如果你想让它升序?
  • 你有多个排序操作,你觉得哪一个不行?

标签: python pandas sorting


【解决方案1】:

我设法解决了我的问题!看来df的排序很好。问题是当我试图访问我的数据集的第一个元素以将这个元素减去同一列的所有其他元素时:由于索引未更改,我正在访问另一个元素而不是最小元素。一个简单的reset_index() 在我获救之后。

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2021-11-05
    • 2021-10-08
    • 2019-04-10
    • 2019-04-12
    • 2020-08-31
    • 1970-01-01
    • 2014-09-19
    相关资源
    最近更新 更多