Python 更改了0.20中的排序索引行为

Python 更改了0.20中的排序索引行为,python,pandas,Python,Pandas,sort_索引的行为似乎已经改变。我想按日期对期间进行排序,但由于我更新为0.20,因此它是按月份的日期进行排序。我已经看过了,但还没有恢复同样的结果。有什么建议吗 谢谢 来自@Brad Solomon的评论让我意识到,排序后,我可以转换成我想要的字符串格式。虽然字符串排序行为仍然存在,但我现在获得了相同的行为 而不是 colnames = ['Date', 'Client', 'Value', 'OtherValue'] df = pd.DataFrame(data={c:v for c,v

sort_索引的行为似乎已经改变。我想按日期对期间进行排序,但由于我更新为0.20,因此它是按月份的日期进行排序。我已经看过了,但还没有恢复同样的结果。有什么建议吗

谢谢


来自@Brad Solomon的评论让我意识到,排序后,我可以转换成我想要的字符串格式。虽然字符串排序行为仍然存在,但我现在获得了相同的行为

而不是

colnames = ['Date', 'Client', 'Value', 'OtherValue']
df = pd.DataFrame(data={c:v for c,v in zip(colnames, [col1,col2,col3,col4])})
df2 = df.groupby(['Client',pd.to_datetime(df['Date']).dt.to_period('W-THU')]).sum().unstack(level=1).fillna(0)
new_cols = [i.start_time.strftime('%d/%m')+
            '-'+i.end_time.strftime('%d/%m')
           for i in df2.columns.levels[1]]
df2.columns.set_levels(new_cols,level=1,inplace=True)
df2.columns = df2.columns.swaplevel(0,1)
df2.sort_index(level=0, axis=1, inplace=True)
书写

colnames = ['Date', 'Client', 'Value', 'OtherValue']
df = pd.DataFrame(data={c:v for c,v in zip(colnames, [col1,col2,col3,col4])})
df2 = df.groupby(['Client',pd.to_datetime(df['Date']).dt.to_period('W-THU')]).sum().unstack(level=1).fillna(0)
df2.columns = df2.columns.swaplevel(0,1)
df2.sort_index(level=0, axis=1, inplace=True)
new_cols = [i.start_time.strftime('%d/%m')+
            '-'+i.end_time.strftime('%d/%m')
           for i in df2.columns.levels[0]]
df2.columns.set_levels(new_cols,level=0,inplace=True)

解决了这个问题。

来自@Brad Solomon的评论让我意识到排序后我可以转换成我想要的字符串格式。虽然字符串排序行为仍然存在,但我现在获得了相同的行为

而不是

colnames = ['Date', 'Client', 'Value', 'OtherValue']
df = pd.DataFrame(data={c:v for c,v in zip(colnames, [col1,col2,col3,col4])})
df2 = df.groupby(['Client',pd.to_datetime(df['Date']).dt.to_period('W-THU')]).sum().unstack(level=1).fillna(0)
new_cols = [i.start_time.strftime('%d/%m')+
            '-'+i.end_time.strftime('%d/%m')
           for i in df2.columns.levels[1]]
df2.columns.set_levels(new_cols,level=1,inplace=True)
df2.columns = df2.columns.swaplevel(0,1)
df2.sort_index(level=0, axis=1, inplace=True)
书写

colnames = ['Date', 'Client', 'Value', 'OtherValue']
df = pd.DataFrame(data={c:v for c,v in zip(colnames, [col1,col2,col3,col4])})
df2 = df.groupby(['Client',pd.to_datetime(df['Date']).dt.to_period('W-THU')]).sum().unstack(level=1).fillna(0)
df2.columns = df2.columns.swaplevel(0,1)
df2.sort_index(level=0, axis=1, inplace=True)
new_cols = [i.start_time.strftime('%d/%m')+
            '-'+i.end_time.strftime('%d/%m')
           for i in df2.columns.levels[0]]
df2.columns.set_levels(new_cols,level=0,inplace=True)

解决它。

乍一看,API似乎没有从更改为。尝试检查
df2.columns。获取每个版本中的\u level\u值(0)。dtype
。我在0.20中得到了
dtype='O'
(不是Period)。这是因为我将datetime对象的字符串格式设置为只返回日/月/日格式的间隔。你的评论实际上让我意识到,我可以做转换后,这是工作!乍一看,API似乎没有从更改为。尝试检查
df2.columns。获取每个版本中的\u level\u值(0)。dtype
。我在0.20中得到了
dtype='O'
(不是Period)。这是因为我将datetime对象的字符串格式设置为只返回日/月/日格式的间隔。你的评论实际上让我意识到,我可以做转换后,这是工作!