按照时间变量列对分组数据框进行排序

3

我是一位有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我有一个包含ID、名称、日期时间和值的数据框。当我使用此数据框的dtypes时,结果如下:

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作为单独的一行,之前的列数变成了行数,导致所有其他列都丢失了。这是不正确的。 - Observer
嗯,你说得对。也许可以帮忙打印 print df.set_index('value').groupby(['ID']).apply(lambda x: x['time'].sort_values()).reset_index() - jezrael
1个回答

3
在您的特定情况下,您是否可以只进行排序而不是分组?例如:
>>> 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) 二元组键进行排序,并且如果有多个类似于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

谢谢。它运行良好。做这件事的方法非常简单。!! - Observer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接