【问题标题】:Data frame rows and columns replication from 1 frame to another数据框行和列从一帧复制到另一帧
【发布时间】:2019-06-04 03:34:07
【问题描述】:

我想将 DF1 的 A 列的特定列值 x 分组为组名,并将 B 列中存在的相同行值聚合为系列或列表

然后,B 列的这些系列/值列表在第一次出现时替换 DF2 列 A 值 x,并复制系列/列表中值长度的行,并在 DF2 列 A 中添加值。

DF1:

A   B     
x   1  
x   2  
x   3       


DF2:
***
Red    Blue  Green  Yellow
x      10     car    four
x      11     Bus    six
y      12     bike   two
z      13     cycle  two 

我希望将 DF2 或新的 DF 形成为

DF3:

Red    Blue  Green  Yellow  
1      10     car    four
2      10     car    four
3      10     car    four
1      11     Bus    six
2      11     Bus    six
3      11     Bus    six
y      12     bike   two
z      13     cycle  two

有人可以帮忙解释一下逻辑吗?最好使用迭代次数较少的 pandas。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以执行outer merge 并使用bfilldf1A 列中的值与B 列结合起来:

    df1.merge(df2, left_on ='A', right_on='Red', how='outer').bfill(axis=1)\
       .drop(['A','Red'], axis=1).rename(columns={'B':'Red'})
    
       Red Blue  Green Yellow
    0   1   10    car   four
    1   1   11    Bus    six
    2   2   10    car   four
    3   2   11    Bus    six
    4   3   10    car   four
    5   3   11    Bus    six
    6   y   12   bike    two
    7   z   13  cycle    two
    

    【讨论】:

    • 不错的一个。 :) 我+1。 (您也可以稍微调整一下以获得 OP 发布的确切输出。:))
    • 谢谢@anky_91!这是原始问题的答案,它有不同的df2,我只是从您的评论中意识到了变化
    • 它是否适合您的问题@D83?请让我知道,而不是改变问题:-)
    • 对编辑表示歉意。我没有清楚地表达需求的复杂性。这就是 DF2 发生变化的原因。请将此方案作为最终要求进行检查。合并函数不会提供所需的输出,因为列值和数据框结构与 DF1 不同
    • 不幸的是输出不符合我的要求。 DF1 列 A 值“x”是与列 B“1,2,3”中表示的一系列值重复的组名。对于每次出现的“x”,我需要将这些“1,2,3”插入到 DF2 列 Red 中。这意味着我需要为 1 , 2, 3,... 的每个插入复制整行。因此,示例中的 RED 列出现了两个“x”。这就是为什么值像 1,2,3,1,2,3。不应对其余列和行进行排序或更改。
    猜你喜欢
    • 2016-08-16
    • 2015-09-08
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多