Pandas 当转换为数据帧时,已排序值的字典将被取消排序

Pandas 当转换为数据帧时,已排序值的字典将被取消排序,pandas,Pandas,我正在读一份1940年至2004年墨西哥32个州GDP的csv文件。这些列是州名称和每年的GDP值 不幸的是,我现在无法添加图像。。。但是,基本上,数据帧有以下列:state_name、1940、1950等。。。state_name的值是每个州的名称(作为字符串),其余列的值是每个州每年的GDP 因此,我试图生成一个新的数据帧,其中不再有state_names列,而只有1940、1950等列。。。其中的值不再是相应的GDP,而是根据给定年份的GDP确定的各州名称。因此,新数据框中的1940列将不

我正在读一份1940年至2004年墨西哥32个州GDP的csv文件。这些列是州名称和每年的GDP值

不幸的是,我现在无法添加图像。。。但是,基本上,数据帧有以下列:state_name、1940、1950等。。。state_name的值是每个州的名称(作为字符串),其余列的值是每个州每年的GDP

因此,我试图生成一个新的数据帧,其中不再有state_names列,而只有1940、1950等列。。。其中的值不再是相应的GDP,而是根据给定年份的GDP确定的各州名称。因此,新数据框中的1940列将不会像当前输出那样按字母顺序列出状态,而是按照GDP的排序(正如我在下面创建字典的循环中生成的那样)

我使用下面的循环(在州)每年(1940年到2004年)对整个数据帧进行排序,然后对排序后的数据帧的名称(在名称中)进行切片

此词典的输出如下所示:

{'1940': 1         Baja California
22           Quintana Roo
8        Distrito Federal
9                 Durango
21              Queretaro
0          Aguascalientes
2     Baja California Sur
...
Name: entidad, dtype: object, 
'1950': 22           Quintana Roo
1         Baja California
8        Distrito Federal
2     Baja California Sur
5     Chihuahua...}
好久不见了。但是,当我试图将字典转换为数据帧时,它会以某种方式覆盖我之前的排序,并检索按字母顺序排列的州名称列表。因此,新的数据框每年都有as列,由相同的名称列表填充

要将字典转换为我正在使用的数据帧,请执行以下操作:

pd.DataFrame(ranks)

根据需要的顺序创建新的数据帧:

In [6]: ordered_df = original_df.sort(['Year','GDP'],axis=0,ascending=False)
创建一个新字典以传递到最终数据帧(这可以更有效地完成):

循环浏览填充字典的新数据帧:

In [8]: for row in ordered_df.iterrows():
            unique_years[row[1]['Year']].append(row[1]['State'])
创建最终数据帧:

In [9]: final_df = pd.DataFrame(unique_years)
输入:

In [11]: original_df
Out[11]: 
    Year       State  GDP
0   1945    New York   84
1   1945       Texas   38
2   1945  California   84
3   1946    New York   56
4   1946       Texas    6
5   1946  California   84
6   1947    New York   75
7   1947       Texas   95
8   1947  California   92
9   1948    New York   50
10  1948       Texas   25
11  1948  California   30
12  1949    New York   16
13  1949       Texas   33
14  1949  California   31
15  1950    New York   37
16  1950       Texas   75
17  1950  California   49
18  1951    New York   28
19  1951       Texas   74
20  1951  California   78
21  1952    New York   57
22  1952       Texas    5
23  1952  California   28
输出:

In [12]: final_df
Out[12]: 
         1945        1946        1947        1948        1949        1950  \
0    New York  California       Texas    New York       Texas       Texas   
1  California    New York  California  California  California  California   
2       Texas       Texas    New York       Texas    New York    New York   

         1951        1952  
0  California    New York  
1       Texas  California  
2    New York       Texas  
对照订购的数据帧检查最终数据帧,以确保正确的GDP订购:

In [13]: ordered_df
Out[13]: 
    Year       State  GDP
21  1952    New York   57
23  1952  California   28
22  1952       Texas    5
20  1951  California   78
19  1951       Texas   74
18  1951    New York   28
16  1950       Texas   75
17  1950  California   49
15  1950    New York   37
13  1949       Texas   33
14  1949  California   31
12  1949    New York   16
9   1948    New York   50
11  1948  California   30
10  1948       Texas   25
7   1947       Texas   95
8   1947  California   92
6   1947    New York   75
5   1946  California   84
3   1946    New York   56
4   1946       Texas    6
0   1945    New York   84
2   1945  California   84
1   1945       Texas   38

您有一些输入/输出示例吗?看起来你可以不用担心排序,然后在…之后对数据帧进行相应的排序?我添加了我创建的字典的一些示例输出,但是我不能添加输出数据帧的图像。感谢您的帮助。另一种方法:不必担心数据帧存储已排序的数据;不要通过迭代数据帧来分析数据;当您使用pandas的组织功能(例如,
groupby
)时,请对结果进行排序。tl;博士-让熊猫做这项工作,它比csv更聪明。另外,您知道数据帧上的多索引吗?谢谢,但我想对每年进行排序,然后创建一个新的数据框架,其中只包含按年份排列的州名,按当年的GDP排序。(类似于您提出的第二种解决方案,但将每年的结果“粘合”在一个数据框中)。新的数据框架将不会有一个独立的州名称列,而是只有1940-2004年的列,其中的值是按当年GDP排序的州名称。我现在明白了。我需要修改我的答案。我建立了一个小测试用例。让我们假设GDP数字远大于测试用例数字:)。
In [12]: final_df
Out[12]: 
         1945        1946        1947        1948        1949        1950  \
0    New York  California       Texas    New York       Texas       Texas   
1  California    New York  California  California  California  California   
2       Texas       Texas    New York       Texas    New York    New York   

         1951        1952  
0  California    New York  
1       Texas  California  
2    New York       Texas  
In [13]: ordered_df
Out[13]: 
    Year       State  GDP
21  1952    New York   57
23  1952  California   28
22  1952       Texas    5
20  1951  California   78
19  1951       Texas   74
18  1951    New York   28
16  1950       Texas   75
17  1950  California   49
15  1950    New York   37
13  1949       Texas   33
14  1949  California   31
12  1949    New York   16
9   1948    New York   50
11  1948  California   30
10  1948       Texas   25
7   1947       Texas   95
8   1947  California   92
6   1947    New York   75
5   1946  California   84
3   1946    New York   56
4   1946       Texas    6
0   1945    New York   84
2   1945  California   84
1   1945       Texas   38