如何在python中从数据帧设置dict中的值

如何在python中从数据帧设置dict中的值,python,pandas,dictionary,dictionary-comprehension,Python,Pandas,Dictionary,Dictionary Comprehension,我有一个数据框,看起来像这样: 创建df的代码: dd = {'name': ["HARDIE'S MOBILE HOME PARK", 'CRESTVIEW RV PARK', 'HOMESTEAD TRAILER PARK', 'HOUSTON PARK MOBILE HOME PARK', 'HUDSON MOBILE HOME PARK', 'BEACH DRIVE MOBILE HOME PARK', 'EVANS TRA

我有一个数据框,看起来像这样:

创建df的代码:

dd = {'name': ["HARDIE'S MOBILE HOME PARK", 'CRESTVIEW RV PARK',
       'HOMESTEAD TRAILER PARK', 'HOUSTON PARK MOBILE HOME PARK',
       'HUDSON MOBILE HOME PARK', 'BEACH DRIVE MOBILE HOME PARK',
       'EVANS TRAILER PARK'],
       'country': ['USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA'],
      'coordinates': ['30.44126118, -86.6240656099999',
       '30.7190163500001, -86.5716222299999',
       '30.5115772500001, -86.4628417499999',
       '30.4424195300001, -86.64733076',
       '30.7629176200001, -86.5928893399999', '30.44417349, -86.59951996',
       '30.4427800300001, -86.62941091'],
      'status':['OPEN', 'CLOSED', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'OPEN']}

df2 = pd.DataFrame(data=dd)
我想做的是创建一个具有以下结构的词典:

{'destination1': 'CRESTVIEW RV PARK; 30.7190163500001, -86.5716222299999',
 'destination2': 'HOMESTEAD TRAILER PARK; 30.5115772500001, -86.4628417499999',
 'destination3': 'HOUSTON PARK MOBILE HOME PARK; 30.4424195300001, -86.64733076',
 'destination4': 'HUDSON MOBILE HOME PARK; 30.7629176200001, -86.5928893399999',
 'destination5': 'BEACH DRIVE MOBILE HOME PARK  ; 30.44417349, -86.59951996'}
如您所见,每个值必须包含名称;从第二行到最后一行的坐标。我正在使用以下代码来执行此操作:

d1 = {f"destination{k}":v + "; " + i for k in range(1, len(df1)-1) for v,i in zip(df1.name, df1.coordinates)}
然而,这是我得到的输出:

{'destination1': 'EVANS TRAILER PARK; 30.4427800300001, -86.62941091',
 'destination2': 'EVANS TRAILER PARK; 30.4427800300001, -86.62941091',
 'destination3': 'EVANS TRAILER PARK; 30.4427800300001, -86.62941091',
 'destination4': 'EVANS TRAILER PARK; 30.4427800300001, -86.62941091',
 'destination5': 'EVANS TRAILER PARK; 30.4427800300001, -86.62941091'}
它只读取数据帧的最后一行,每个键都有相同的值,但我想要的是,对于每个键,它的值必须来自数据帧中从第二行到最后一行的每一行


如果有人知道怎么做,我将非常感谢你的帮助。

你可以像这样列举拉链

dd = {'name': ["HARDIE'S MOBILE HOME PARK", 'CRESTVIEW RV PARK',
       'HOMESTEAD TRAILER PARK', 'HOUSTON PARK MOBILE HOME PARK',
       'HUDSON MOBILE HOME PARK', 'BEACH DRIVE MOBILE HOME PARK',
       'EVANS TRAILER PARK'],
       'country': ['USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA'],
      'coordinates': ['30.44126118, -86.6240656099999',
       '30.7190163500001, -86.5716222299999',
       '30.5115772500001, -86.4628417499999',
       '30.4424195300001, -86.64733076',
       '30.7629176200001, -86.5928893399999', '30.44417349, -86.59951996',
       '30.4427800300001, -86.62941091'],
      'status':['OPEN', 'CLOSED', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'OPEN']}

df1 = pd.DataFrame(data=dd)

d_out = {
    f"destination{idx+1}":'; '.join(v) for idx, v in enumerate(zip(df1.name[1:], df1.coordinates[1:]))
}

d_out

{'destination1': 'CRESTVIEW RV PARK; 30.7190163500001, -86.5716222299999',
 'destination2': 'HOMESTEAD TRAILER PARK; 30.5115772500001, -86.4628417499999',
 'destination3': 'HOUSTON PARK MOBILE HOME PARK; 30.4424195300001, -86.64733076',
 'destination4': 'HUDSON MOBILE HOME PARK; 30.7629176200001, -86.5928893399999',
 'destination5': 'BEACH DRIVE MOBILE HOME PARK; 30.44417349, -86.59951996',
 'destination6': 'EVANS TRAILER PARK; 30.4427800300001, -86.62941091'}
你不必做dict理解就能得到这个结果,如果你能像这样在pandas数据框中做几列,你就能得到这个结果

df1['destination'] = [f"destination{k}" for k in range(len(df1))]
df1['value'] = df1['name'] + "; " + df1['coordinates'] 

df1[['destination', 'value']][1:].set_index("destination").to_dict()['value']

{'destination1': 'CRESTVIEW RV PARK; 30.7190163500001, -86.5716222299999',
 'destination2': 'HOMESTEAD TRAILER PARK; 30.5115772500001, -86.4628417499999',
 'destination3': 'HOUSTON PARK MOBILE HOME PARK; 30.4424195300001, -86.64733076',
 'destination4': 'HUDSON MOBILE HOME PARK; 30.7629176200001, -86.5928893399999',
 'destination5': 'BEACH DRIVE MOBILE HOME PARK; 30.44417349, -86.59951996',
 'destination6': 'EVANS TRAILER PARK; 30.4427800300001, -86.62941091'}

示例中的dict理解有两个for循环:

d1={
f“目的地{k}”:v+“;”+i
对于范围(1,len(df1)-1)中的k
对于v,zip中的i(df1.name,df1.coordinates)
}
在这些循环中,k独立于v和i进行迭代。第二个循环有很多问题(要理解它们,只需逐步执行操作
df1.name
df1.coordinates
,和
zip(df1.name,df1.coordinates)
,看看这是怎么回事-注意,df1.name是一个保留属性,它引用的是数据帧的名称,而不是列“name”)

您真正想要的是在df1中为每一行循环多个元素。为此,只需使用第一个循环,但在构建值时从df访问所需的元素:

d1={
f“destination{k}”:(df1.loc[k,'名称']+';“+df1.loc[k,'坐标']))
对于范围(1,len(df1)-1)中的k
}
更多信息,请查看“理解”部分

或者,(最好)使用熊猫

d1=pd.系列(
df1['name']+';'+df['coordinates'],
index=('destination'+df.index.astype(str)),
)

如果此时确实需要词典,可以将该系列转换为
d1=d1的词典。要使用dict()

请添加数据的文本表示形式,而不是图像。人们将如何复制和测试?您能否添加创建数据帧的代码?热心帮助您的人并不热衷于手动重新键入您的数据。另外,不要发布代码或数据的图像。以文本形式发布。这使得事情更容易搜索,屏幕读者也更容易将问题的内容传达给视力受损的人。仅供参考:如果循环是l1中的i:l2中的j
,那么它就像
[…l1中的i代表l2中的j]
在列表理解中。我刚刚用代码更新了帖子以创建df。请提供预期的结果。显示中间结果与预期结果的偏差。我们应该能够将单个代码块粘贴到文件中,运行它,并重现您的问题。这也让我们可以在您的上下文中测试任何建议。