【问题标题】:Sort grouped dataframe based on the time variable colum根据时间变量列对分组数据框进行排序
【发布时间】:2016-07-02 16:17:37
【问题描述】:

我有一个包含 ID、名称、日期时间和值的数据框。当我使用这个 DF 的 dtypes 时,我得到 ​​p>

ID - int64
time - object
value - int

我想按 ID 对数据框进行分组,然后按时间顺序对行进行排序。我尝试了以下,

df['time'] = pd.to_datetime(df['time'])
p= df.groupby(['ID'])

然后我尝试了,

p.sort_values(['time'])

但出现错误,

AttributeError: Cannot access callable attribute 'sort_values' of 'DataFrameGroupBy' objects, try using the 'apply' method

然后我尝试了,

p['time'].apply(lambda x: x.sort_values())

这似乎仅适用于该列。我无法对所有列进行排序。我想在分组 ID 后根据时间变量对整个数据帧进行排序。我知道这可能我们很容易。但是试了很久没有结果。有人可以帮我做这件事吗?

【问题讨论】:

  • @jezrael 这个将 ID 作为单行,将行数作为列数,并丢失所有其他列。这是不正确的。
  • 嗯,你是对的。也许帮助print df.set_index('value').groupby(['ID']).apply(lambda x: x['time'].sort_values()).reset_index()

标签: python python-2.7 sorting pandas dataframe


【解决方案1】:

在您的特定情况下,您不能只排序而不是 groupby 吗?例如

>>> df
   ID       time  value
0   1 2016-03-05     10
1   1 2016-01-04     20
2   2 2015-05-05     30
3   3 2016-01-02     40
>>> df.dtypes
ID                int64
time     datetime64[ns]
value             int64
dtype: object
>>> df.sort_values(["ID", "time"])
   ID       time  value
1   1 2016-01-04     20
0   1 2016-03-05     10
2   2 2015-05-05     30
3   3 2016-01-02     40

这将根据每行的 (ID, time) 的 2 元组键对它们进行排序,并且即使有多个类似 value 的列也会以相同的方式工作:

>>> df.sort_values(["ID", "time"]) # different df
   ID       time  value  value2
1   1 2016-01-04     20     200
0   1 2016-03-05     10     100
2   2 2015-05-05     30     300
3   3 2016-01-02     40     400

【讨论】:

  • 谢谢。它运作良好。这样做的方法很简单。!!
猜你喜欢
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2016-09-10
  • 1970-01-01
  • 2020-05-15
  • 2020-02-29
相关资源
最近更新 更多