将多个数据帧合并为基于三列的匹配值到单个数据帧

时间:2016-09-23 13:16:06

标签: python pandas numpy dataframe

我有多个数据帧(25个数据帧),我正在寻找从所有数据帧的三列中反复出现行值。以下是我的daframes的例子

s1 = pd.merge(df1, df2, how='left', on=['chr', 'start', 'end'])
df_final = pd.merge(s1, df3[['chr', 'start', 'end']], how='left', on=['chr', 'start','end'])

最后我的目标是查看这些daframe的第三列并根据这三列值的匹配行以及datafrme的名称作为最后一列提取新的数据帧。所以最终的数据框应该是这样的,

function smak_related_posts() {
  global $post;
  $tags = wp_get_post_tags( $post->ID );
  if($tags) {
    foreach( $tags as $tag ) {
      $tag_arr .= $tag->slug . ',';
    }
    $args = array(
      'tag' => $tag_arr,
      'numberposts' => 4,
      'post__not_in' => array($post->ID),
      'post_type' => array('post', 'projects'),
    );
    $related_posts = get_posts( $args );
    if($related_posts) {
      echo '<footer class="entry-footer">';
        echo '<h3>Se også...</h3>';
        echo '<div id="masonry-loop">';
          get_template_part( 'template-parts/content', 'masonry_sizer' );
          foreach ( $related_posts as $post ) : setup_postdata( $post );
                  get_template_part( 'template-parts/content', 'masonry' );
          endforeach; }
          }
        echo '</div>';
      echo '</div>';
  wp_reset_postdata();
}

我知道下面的python脚本行将创建上面的输出而不将Sample作为列。

return !selectedCategory || product.category == selectedCategory;

但我有超过25个数据框,我需要根据匹配值查找合并。任何强大而更好的解决方案都会非常感激

1 个答案:

答案 0 :(得分:1)

假设您有一个将样本名称映射到DataFrames的字典:

dfs = {'df1': df1, 'df2': df2}

(依此类推)。

常用相关键(可以使用的形式)

common_tups = set.intersection(*[set(df[['chr', 'start', 'end']].drop_duplicates().apply(tuple, axis=1).values) for df in dfs.values()])

现在,您只需要为每个DataFrame查找相关行,添加DataFrame的名称作为示例,并连接结果:

pd.concat([df[df[['chr', 'start', 'end']].apply(tuple, axis=1).isin(common_tups)].assign(Sample=name) for (name, df) in dfs.items()])
相关问题