我使用熊猫df
(数值为距离)导入了以下CSV数据框df= pd.read_csv("Example.csv", header=0, index_col="Forest")
Forest,Bell Bay,Surrey Hills,Smithton,Hobart
Coupe 1,158,194,10,49
Coupe 2,156,169,71,84
Coupe 3,10,186,101,163
Coupe 4,47,94,134,139
Coupe 5,144,61,135,56
Coupe 6,27,27,134,36
Coupe 7,114,4,143,113
Coupe 8,71,170,190,140
Coupe 9,94,54,73,128
Coupe 10,46,194,92,36
我有第二个数据框,它是使用df2
导入的df2 = pd.read_csv("ExampleSupply.csv", header=0, index_col="Forest")
(数字是供应量)
Forest,Supply
Coupe 1,600
Coupe 2,100
Coupe 3,900
Coupe 4,300
Coupe 5,300
Coupe 6,400
Coupe 7,900
Coupe 8,700
Coupe 9,500
Coupe 10,300
列Forest
在两个数据帧之间匹配。
我使用以下方法从I
创建了一个森林列表df
:
I = df.index.tolist()
结果:
['Coupe 1', 'Coupe 2', 'Coupe 3', 'Coupe 4', 'Coupe 5', 'Coupe 6', 'Coupe 7', 'Coupe 8', 'Coupe 9', 'Coupe 10']
以及J
中的目的地df
的使用:
J = df.columns.values.tolist()
结果:
['Bell Bay', 'Surrey Hills', 'Smithton', 'Hobart']
元组(弧)列表是使用以下方法创建的:
arcs = [(i, j) for i in I for j in J]
结果:
[('Coupe 1', 'Bell Bay'), ('Coupe 1', 'Surrey Hills'), ('Coupe 1', 'Smithton'), ('Coupe 1', 'Hobart'), ('Coupe 2', 'Bell Bay'), ('Coupe 2', 'Surrey Hills'), ('Coupe 2', 'Smithton'), ('Coupe 2', 'Hobart'), ('Coupe 3', 'Bell Bay'), ('Coupe 3', 'Surrey Hills'), ('Coupe 3', 'Smithton'), ('Coupe 3', 'Hobart'), ('Coupe 4', 'Bell Bay'), ('Coupe 4', 'Surrey Hills'), ('Coupe 4', 'Smithton'), ('Coupe 4', 'Hobart'), ('Coupe 5', 'Bell Bay'), ('Coupe 5', 'Surrey Hills'), ('Coupe 5', 'Smithton'), ('Coupe 5', 'Hobart'), ('Coupe 6', 'Bell Bay'), ('Coupe 6', 'Surrey Hills'), ('Coupe 6', 'Smithton'), ('Coupe 6', 'Hobart'), ('Coupe 7', 'Bell Bay'), ('Coupe 7', 'Surrey Hills'), ('Coupe 7', 'Smithton'), ('Coupe 7', 'Hobart'), ('Coupe 8', 'Bell Bay'), ('Coupe 8', 'Surrey Hills'), ('Coupe 8', 'Smithton'), ('Coupe 8', 'Hobart'), ('Coupe 9', 'Bell Bay'), ('Coupe 9', 'Surrey Hills'), ('Coupe 9', 'Smithton'), ('Coupe 9', 'Hobart'), ('Coupe 10', 'Bell Bay'), ('Coupe 10', 'Surrey Hills'), ('Coupe 10', 'Smithton'), ('Coupe 10', 'Hobart')]
我想在row index
中创建df
(在Forest
中引用I
)和在df2
中数量值的字典。字典应如下所示:
dQ = {'Coupe 1': 600, 'Coupe 2': 100, 'Coupe 3': 900, 'Coupe 4': 300, 'Coupe 5': 300, 'Coupe 6': 400, 'Coupe 7': 900, 'Coupe 8': 700, 'Coupe 9': 500, 'Coupe 10': 300}
应通过引用列表Supply
或{{1}中的键,将df2
中的数量值Forest
与df
中的I
链接}}。
有人可以建议最好的方法来编写这本词典吗?这只是组合矩阵中的一小部分I(10)和J(4)。我的方法必须适用于具有超过一千万个I * J组合的超大型数据集。帮助将不胜感激!
答案 0 :(得分:0)
您必须遍历列表I
,并在df2
中找到相应的行,然后选择df2['Supply']
并将其添加到所需的字典中。
dQ = {}
for forest in I:
dQ[forest] = df2.loc[forest]['Supply']
print(dQ)
结果:
{'Coupe 1': 600, 'Coupe 2': 100, 'Coupe 3': 900, 'Coupe 4': 300, 'Coupe 5': 300, 'Coupe 6': 400, 'Coupe 7': 900, 'Coupe 8': 700, 'Coupe 9': 500, 'Coupe 10': 300}
Python方式-
dQ = {forest: df2.loc[forest]['Supply'] for forest in I}
问题-为什么您需要从df
查找“ Forest”,因为您的df2
已经具有相同的索引并且“ Forest”值匹配。如果您只能使用df2数据并执行相同操作,请使用{p>将df2
转换为字典
df2.to_dict()['Supply']
它也应该给您相同的结果