wangxishi

2020-09-22   阅读量: 8672

Python 数据分析师

python按照日期升序或者降序排序

扫码加入数据分析学习群

想要表内数字1-数字6这6列按照他前面的日期1-日期6列的时间升序或者降序排序,就是日期由远到近或者由近到远排序,请问如何操作

1.png

问题0922.xlsx


添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
81.1356 2 15 关注作者 收藏

评论(15)

ermutuxia
2020-10-29
import pandas as pd
data1 = pd.read_excel(r"D:\1600757400_452096.xlsx")

result1=pd.DataFrame()

for i in range(1,12,2):
    coli=data1.iloc[:,[0,i,i+1]]    
    coli.columns=["序号","日期","数字"]    
    result1=pd.concat([result1,coli],axis=0)
    
result1.sort_values(by=["序号","日期"],inplace=True)

result2=pd.DataFrame()

for i in range(1,10):

    temp1=pd.DataFrame(result1[result1["序号"]==i]["日期"]).T    
    temp2=pd.DataFrame(result1[result1["序号"]==i]["数字"]).T   
    temp1.index=[i]    
    temp2.index=[i]    
    temp3=pd.concat([temp1,temp2],axis=1)    
    temp3.index=[i]    
    result2=pd.concat([result2,temp3],axis=0)

上面代码的问题在于,你进行两个数据框纵向合并的时候,需要要让两个数据框的列名字,一一对应

你看下现在你的result2和temp3数据框如下

image.png

如果想正确合并,你需要修改下列名字

0.0000 0 0 回复
ermutuxia
2020-10-29

File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py", line 350, in _verify_integrity

"tot_items: {1}".format(len(self.items), tot_items)


AssertionError: Number of manager items must equal union of block items

# manager items: 24, # tot_items: 156


0.0000 0 0 回复
wangxishi
2020-10-29

报错提示:

1.png

0.0000 0 0 回复
ermutuxia
2020-10-29

你把报错的提示贴一下下

0.0000 0 0 回复
wangxishi
2020-10-29

我把代码稍微改了下,为什么最后result2 concat报错呢

data1 = pd.read_excel(r"C:\Users\wxstt\Desktop\1600757400_452096.xlsx")

result1=pd.DataFrame()

for i in range(1,12,2):

coli=data1.iloc[:,[0,i,i+1]]

coli.columns=["序号","日期","数字"]

result1=pd.concat([result1,coli],axis=0)

result1.sort_values(by=["序号","日期"],inplace=True)

result2=pd.DataFrame()

for i in range(1,10):

temp1=pd.DataFrame(result1[result1["序号"]==i]["日期"]).T

temp2=pd.DataFrame(result1[result1["序号"]==i]["数字"]).T

temp1.index=[i]

temp2.index=[i]

temp3=pd.concat([temp1,temp2],axis=1)

temp3.index=[i]

result2=pd.concat([result2,temp3],axis=0)


46.1462 1 0 回复
wangxishi
2020-09-25

好的,谢谢!

0.0000 0 0 回复
wangxishi
2020-09-24

for i in range(1,10),括号里面是(1,10),是因为这样的话i能循环到9,对吗

0.0000 0 0 回复
ermutuxia
2020-09-24

是的,list(range(1,10))=[1, 2, 3, 4, 5, 6, 7, 8, 9]

image.png

0.2183 1 0 回复
ermutuxia
2020-09-23
import pandas as pd
data=pd.read_excel("D:\\360安全浏览器下载\\1600757400_452096.xlsx")
result1=pd.DataFrame()
for i in range(1,12,2):
    coli=data.iloc[:,[0,i,i+1]]
    coli.columns=["序号","日期","数值"]
    result1=pd.concat([result1,coli],axis=0)
    
result1.sort_values(by=["序号","日期"],inplace=True)



riqilist=["日期"+str(i) for i in range(1,7)]
shuzhilist=["数值"+str(i) for i in range(1,7)]
shunxu=[]
for i in range(6):
    shunxu.append(riqilist[i])
    shunxu.append(shuzhilist[i])

#生成一个空白的数据框接收结果
result2=pd.DataFrame()
#对每个序号进行遍历
for i in range(1,10):
    #将序号i对应的日期调出来生成一个数据框
    temp1=pd.DataFrame(result1[result1["序号"]==i]["日期"]).T
    temp1.columns=riqilist
    temp1.index=[i]
    #将序号i对应的数值调出来生成一个数据框
    temp2=pd.DataFrame(result1[result1["序号"]==i]["数值"]).T
    temp2.columns=shuzhilist
    temp2.index=[i]
    #将temp1和temp2进行横向合并
    temp3=pd.concat([temp1,temp2],axis=1)
    temp3["序号"]=i
    #按照要求对变量名字进行排序
    temp4=temp3.reindex(columns=["序号"]+shunxu)
    #将格式正确的数据放入到result2中
    result2=pd.concat([result2,temp4],axis=0)

image.png

35.6778 2 0 回复
wangxishi
2020-09-23

这个结果生成的表还是按照列排序的,我想按照行排序,比如第一行客户后面每行日期按照行升序或者降序排序,不要变成列

0.0000 0 0 回复
s1223452840
2020-09-23

image.png

0.2183 1 0 回复
s1223452840
2020-09-23

df = pd.read_excel(r"C:\Users\12234\Desktop\bin\1600757400_452096.xlsx")

df


kk = pd.DataFrame()

qq = range(1,12,2)

for i in qq:

cut1 = df.iloc[:,[i,i+1]]

ss1 = cut1.sort_values(by=["日期{num}".format(num=qq.index(i)+1)],ignore_index=True)

kk = pd.concat([kk,ss1],axis=1)

# kk.reset_index(drop = True,inplace = True)

kk


0.2183 1 0 回复
wangxishi
2020-09-23

排序后可以还是横着展现吗?日期和日期后面的数字还是都在一行,但是在每行里面都按照日期升序或者降序排列

0.0000 0 0 回复
ermutuxia
2020-09-22

image.png

0.0000 0 0 回复
ermutuxia
2020-09-22
import pandas as pd
data=pd.read_excel("D:\\360安全浏览器下载\\1600757400_452096.xlsx")
result1=pd.DataFrame()
for i in range(1,12,2):
    coli=data.iloc[:,[0,i,i+1]]
    coli.columns=["序号","日期","数值"]
    result1=pd.concat([result1,coli],axis=0)
    
result1.sort_values(by=["序号","日期"],inplace=True)

image.png


image.png

0.1417 1 0 回复
ermutuxia
2020-09-22


import pandas as pd

data=pd.read_excel("D:\\360安全浏览器下载\\1600757400_452096.xlsx")

result1=pd.DataFrame()

for i in range(1,12,2):

coli=data.iloc[:,[0,i,i+1]]

coli.columns=["序号","日期","数值"]

result1=pd.concat([result1,coli],axis=0)

result1.sort_values(by=["序号","日期"])

image.png




35.6778 2 0 回复

推荐课程