在保持二级索引完整的同时对多索引数据框中的行进行排序
Posted
技术标签:
【中文标题】在保持二级索引完整的同时对多索引数据框中的行进行排序【英文标题】:Sorting rows in multi-index dataframe while keeping secondary index in tact 【发布时间】:2021-08-06 08:14:36 【问题描述】:我设置了以下多索引数据框:
created_at ... compound
conv_nr elem_nr ...
0 0 2020-03-30 18:41:32+00:00 ... 0.7184
1 2020-03-30 18:31:47+00:00 ... -0.0003
1 0 2020-03-30 18:35:15+00:00 ... -0.3612
1 2020-03-30 18:34:00+00:00 ... 0.1877
2 2020-03-30 18:29:36+00:00 ... -0.1027
... ... ... ...
29071 1 2019-05-22 12:58:12+00:00 ... 0.0000
29072 0 2019-05-22 13:20:31+00:00 ... -0.6619
1 2019-05-22 12:58:12+00:00 ... 0.0000
29073 0 2019-05-22 13:20:05+00:00 ... 0.7506
1 2019-05-22 12:58:12+00:00 ... 0.0000
我正在努力订购,以便时间戳按升序排列,并且“elem_nr”也相应地重新索引(保持不变)。考虑什么时候 conv_nr = 0。结果应该是:
created_at ... compound
conv_nr elem_nr ...
0 0 2020-03-30 18:31:47+00:00 ... -0.0003
1 2020-03-30 18:41:32+00:00 ... 0.7184
所以基本上我需要获取递增时间戳,同时确保“elem_nr”不会被翻转/保持在原位。
【问题讨论】:
按conv_nr
组升序排序?
【参考方案1】:
IIUC尝试使用.values或.to_numpy()来防止pandas影响索引:
import numpy as np
import pandas as pd
df = pd.DataFrame(
'conv_nr': [0, 0, 1, 1, 1],
'elem_nr': [0, 1, 0, 1, 2, ],
'created_at': ['2020-03-30 18:41:32+00:00',
'2020-03-30 18:31:47+00:00',
'2020-03-30 18:35:15+00:00',
'2020-03-30 18:34:00+00:00',
'2020-03-30 18:29:36+00:00'],
'compound': [0.7184, -0.0003, -0.3612, 0.1877, -0.1027]
)
df['created_at'] = pd.to_datetime(df['created_at'])
df = df.set_index(['conv_nr', 'elem_nr'])
# Use df.column accessor to select all columns
# Use .values to aligning by index
df[df.columns] = df.sort_values(
['conv_nr', 'created_at'], ascending=True
).values
print(df)
df
:
created_at compound
conv_nr elem_nr
0 0 2020-03-30 18:31:47+00:00 -0.0003
1 2020-03-30 18:41:32+00:00 0.7184
1 0 2020-03-30 18:29:36+00:00 -0.1027
1 2020-03-30 18:34:00+00:00 0.1877
2 2020-03-30 18:35:15+00:00 -0.3612
【讨论】:
以上是关于在保持二级索引完整的同时对多索引数据框中的行进行排序的主要内容,如果未能解决你的问题,请参考以下文章
在熊猫多索引数据框中返回满足逻辑索引条件的每个组的最后一行[重复]