我确信这将成为一个' doh'那一刻,但我很难在数据帧之间复制一组列,其中df1中的特定列的值也在df2中找到。
从这里我建立一个不包含' p_people_id'的列(列)列表。来自df1的字段并在df2中创建这些字段并分配一个nan值。 COLS = 之后df2看起来像这样: 使用这些dfs,我试图查找df2.a_people_id == df1.p_people_id的所有实例,并将df1 [cols]的值分配给df2实例。
使用.loc查找实例非常简单。我设法能够使用.loc选择我想要定位的cols
df2.loc[df2['a_people_id']==df1['p_people_id'][0],np.array(cols)]
但是,如果我尝试这样的设置/分配那些特定列,其中df1中的id字段与df2中的id字段匹配:
df2.loc[df2['a_people_id']==df1['p_people_id'][0],np.array(cols)]=df1.loc[df1['p_people_id']==df1['p_people_id'][0],np.array(cols)]
我试图以各种方式利用.ix,.loc,.iloc,.where,.select,.set,但这必须是我' m&#34的其中一个区域;只是没有做对。"我可以发布其他示例,我已设法正确找到[cols]的语法,其中特定ID匹配且没有错误或者查看vs copy'打印警告,但也不会发生任何分配。我在哪里错了?
答案 0 :(得分:1)
如果我没弄错的话,我认为您正在寻找加入操作。
特别是,您在描述中的这句话:
df2.loc[df2['a_people_id']==df1['p_people_id'][0],np.array(cols)]
表示"在df2
中查找p_people_id
与第一个p_people_id
匹配的所有行,并为这些行选择cols
列。
这会生成一组行和一列(在您的示例中为6,所有都包含NA' s)如果我得到正确的话,那么您希望将这6行与df1中的相应行放在一起,加上p_people_id
中的所有df1
。
如果我的上述假设是正确的,那么可以通过简单的连接来完成。像这样:
pd.merge(left=df1, left_on="p_people_id",
right=df2, right_on="p_people_id")
如果df1中有1000个不同的p_people_id,并且每个df2中有6行,则上述语句将生成一个包含6000行的数据帧。
然后,您可以在结果中选择所需的列。