Pandas 当转换为数据帧时,已排序值的字典将被取消排序
我正在读一份1940年至2004年墨西哥32个州GDP的csv文件。这些列是州名称和每年的GDP值 不幸的是,我现在无法添加图像。。。但是,基本上,数据帧有以下列:state_name、1940、1950等。。。state_name的值是每个州的名称(作为字符串),其余列的值是每个州每年的GDP 因此,我试图生成一个新的数据帧,其中不再有state_names列,而只有1940、1950等列。。。其中的值不再是相应的GDP,而是根据给定年份的GDP确定的各州名称。因此,新数据框中的1940列将不会像当前输出那样按字母顺序列出状态,而是按照GDP的排序(正如我在下面创建字典的循环中生成的那样) 我使用下面的循环(在州)每年(1940年到2004年)对整个数据帧进行排序,然后对排序后的数据帧的名称(在名称中)进行切片 此词典的输出如下所示:Pandas 当转换为数据帧时,已排序值的字典将被取消排序,pandas,Pandas,我正在读一份1940年至2004年墨西哥32个州GDP的csv文件。这些列是州名称和每年的GDP值 不幸的是,我现在无法添加图像。。。但是,基本上,数据帧有以下列:state_name、1940、1950等。。。state_name的值是每个州的名称(作为字符串),其余列的值是每个州每年的GDP 因此,我试图生成一个新的数据帧,其中不再有state_names列,而只有1940、1950等列。。。其中的值不再是相应的GDP,而是根据给定年份的GDP确定的各州名称。因此,新数据框中的1940列将不
{'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