【问题标题】:Pandas - Filling each rows of one Dataframe with value from another DataframePandas - 用另一个数据框的值填充一个数据框的每一行
【发布时间】:2019-01-14 10:40:47
【问题描述】:

我有两个数据框,一个带有一组日期 (df1),另一个带有一组 emp_ids (df2)。我正在尝试创建一个新的数据框,以便将 df2 中的每个 emp_id 标记为 df1 中的每个日期。

下面是我的 Dataframe 的样子

df1

2018-01-01
2018-01-02
2018-01-03
2018-01-04

df2

emp_1
emp_2
emp_3

预期输出:

2018-01-01,emp_1
2018-01-02,emp_1
2018-01-03,emp_1
2018-01-04,emp_1
2018-01-01,emp_2
2018-01-02,emp_2
2018-01-03,emp_2
2018-01-04,emp_2
2018-01-01,emp_3
2018-01-02,emp_3
2018-01-03,emp_3
2018-01-04,emp_3

我将日期列转换为字符串并尝试执行以下操作,但它返回了一个空数据框

我尝试过pd.merge(df1, df2])

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您尝试执行的操作称为carthesian product。在pandas 你可以这样做:

    df1['key'] = 0
    df2['key'] = 0
    
    result = df1.merge(df2, how='outer').drop('key',axis= 1)
    

    编辑:以证明它有效

    df1 = pd.DataFrame(['2018-01-01','2018-01-02','2018-01-03','2018-01-04'],columns=['date'])
    df2 = pd.DataFrame(['emp_1','emp_2','emp_3'],columns=['id'])
    
    # res
    df1['key'] = 0
    df2['key'] = 0
    
    res = df1.merge(df2, how='outer').drop('key',axis= 1)
    
    # print
    print(res.sort_values('id'))
    

    控制台:

        date        id
    0   2018-01-01  emp_1
    3   2018-01-02  emp_1
    6   2018-01-03  emp_1
    9   2018-01-04  emp_1
    1   2018-01-01  emp_2
    4   2018-01-02  emp_2
    7   2018-01-03  emp_2
    10  2018-01-04  emp_2
    2   2018-01-01  emp_3
    5   2018-01-02  emp_3
    8   2018-01-03  emp_3
    11  2018-01-04  emp_3
    

    【讨论】:

    • 感谢您的回复。这确实有帮助,但我看到有几个日期没有创建新记录。我已将所有日期转换为字符串,然后执行上述合并。但我不确定为什么有几个日期没有创建新行..
    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2018-12-08
    • 2022-12-09
    • 1970-01-01
    相关资源
    最近更新 更多