我有一个包含 ID、名称、日期时间和值的数据框。当我使用这个 DF 的数据类型时,我得到 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 进行分组后根据时间变量对整个数据帧进行排序。我知道这可能对我们来说很容易。但是试了很久都没有结果。有人可以帮我做这件事吗?
最佳答案
在您的特定情况下,您不能只用 sort 而不是 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) 的二元组键对它们进行排序,并且即使有多个类似 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
关于python - 根据时间变量列对分组数据帧进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36041539/