【问题标题】:Copying set of specific columns between Pandas dfs where specific values match在特定值匹配的 Pandas dfs 之间复制一组特定列
【发布时间】:2017-01-25 18:27:22
【问题描述】:

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

df1 的简化版本如下所示:

df2 的简化版本如下所示:

从这里开始,我正在构建一个不包括 df1 中的“p_people_id”字段的列(cols)列表,并在 df2 中创建这些字段并分配一个 nan 值。 列= 之后 df2 看起来像这样: 使用这些 dfs,我试图查找 df2.a_people_id == df1.p_people_id 的所有实例,并将 df1[cols] 的值分配给 df2 实例。

使用 .loc 查找实例非常简单。我已经设法能够使用 .loc 选择我想要定位的列

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,但这必须是我“只是做得不对的领域之一。 "我可以发布其他示例,在这些示例中,我设法获得了正确的语法,以找到特定 id 匹配的 [cols] 并且没有打印错误或“查看与复制”警告,但也没有发生分配。我哪里错了?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案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),如果我得到正确的结果,那么您希望将这 6 行与 df1 中的相应行放在一起,然后为df1 中的所有 p_people_id

    如果我上面的假设是正确的,那么这可以通过简单的连接来完成。像这样:

    pd.merge(left=df1, left_on="p_people_id",
             right=df2, right_on="p_people_id")
    

    如果 df1 中有 1000 个不同的 p_people_id 并且每个在 df2 中有 6 行,则上述语句将生成一个包含 6000 行的数据框。

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

    【讨论】:

    • 这看起来完全符合我的要求,只是有一点重复,但这是我加入 dfs 后可以解决的最小问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多