在特定值匹配的Pandas dfs之间复制特定列的集合

时间:2016-09-17 17:41:59

标签: python pandas dataframe

我确信这将成为一个' doh'那一刻,但我很难在数据帧之间复制一组列,其中df1中的特定列的值也在df2中找到。

df1的简化版本如下所示: df1

df2的简化版本如下所示: df2

从这里我建立一个不包含' p_people_id'的列(列)列表。来自df1的字段并在df2中创建这些字段并分配一个nan值。 COLS = columns from df1 != p_people_id 之后df2看起来像这样: df2 w appended cols 使用这些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)]  

这样可以正常工作并返回:enter image description here

但是,如果我尝试这样的设置/分配那些特定列,其中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)]

什么都没发生,我不知道为什么。 df2 assignment results

我试图以各种方式利用.ix,.loc,.iloc,.where,.select,.set,但这必须是我' m&#34的其中一个区域;只是没有做对。"我可以发布其他示例,我已设法正确找到[cols]的语法,其中特定ID匹配且没有错误或者查看vs copy'打印警告,但也不会发生任何分配。我在哪里错了?

1 个答案:

答案 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行的数据帧。

然后,您可以在结果中选择所需的列。