我正在阅读一份csv文件,其中包括1940年至2004年墨西哥32个州的国内生产总值。这些列是州名和每年的GDP值。
不幸的是,我现在无法添加图像...但是,基本上,数据框具有如下列:state_name,1940,1950等... state_name的值是每个州的名称(如字符串),其余列的值是每年每个州的GDP。
所以,我正在尝试生成一个新的数据帧,其中不再有state_names列,而只有列1940,1950等......其中值不再是相应的GDP,而是根据状态的名称在给定的一年中达到GDP。因此,新数据框中的第1940列将列出不按字母顺序排列的状态,就像我当前的输出那样,但是通过GDP的排序(就像我在循环中生成的那样,在下面创建字典)。
我使用以下循环(在状态中)按年(1940年至2004年)对整个数据框进行排序,然后切片此排序数据框的名称(名称中)。
ranks = {}
for year in pibe.columns.values[1:]:
states = pibe.sort(columns=year, ascending=False)
names = states["entidad"]
ranks[year] = names
此词典的输出如下所示:
{'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...}
这么好。但是,当我尝试将字典转换为数据框时,它会以某种方式覆盖我之前的排序并检索按字母顺序排列的状态名称列表。因此,新数据框每年都有一列用相同的名称列表填充。
将字典转换为我正在使用的数据框:
pd.DataFrame(ranks)
答案 0 :(得分:0)
根据您需要的顺序创建新的数据框:
In [6]: ordered_df = original_df.sort(['Year','GDP'],axis=0,ascending=False)
创建一个新字典以传递到最终数据框(这可以更有效地完成):
In [7]: unique_years = {item[1]['Year']:[] for item in ordered_df.iterrows()}
循环填充字典的新数据框:
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