【问题标题】:What is the Python equivalent to 'UnionAll' in SQL and how to use it?什么是 Python 等价于 SQL 中的“UnionAll”以及如何使用它?
【发布时间】:2018-03-20 21:51:23
【问题描述】:

我需要以类似于 SQL 中的 UnionAll 的方式将数据框与列表结合起来。这是一个例子:

df1 = pd.DataFrame([('A',10),('B',20),('C',30)], columns=['code','value'])

df1

code   value
 A       10
 B       20
 C       30

list_A = [100, 200, 300]

因此,我需要得到如下数据框:

code   value   list_A
 A       10      100
 A       10      200
 A       10      300
 B       20      100
 B       20      200
 B       20      300
 C       30      100
 C       30      200
 C       30      300

【问题讨论】:

    标签: python sql dataframe


    【解决方案1】:

    这是实现您想要的结果的一种方法,但这仅在df1 中的行数等于list_A 的长度时才有效。 (无论如何,我认为这是你的问题有意义的唯一方法)。

    首先使用pandas.concat()“重复”你的DataFrame。

    import pandas as pd
    df2 = reduce(
        lambda a, b: pd.concat([a, b]),
        (df1 for i in range(len(list_A)))
    )
    
    df2 = df2.reset_index(drop=True)
    

    然后添加新列:

    df2['list_A'] = list_A * len(list_A)
    

    输出:

    #  code  value  list_A
    #0    A     10     100
    #1    B     20     200
    #2    C     30     300
    #3    A     10     100
    #4    B     20     200
    #5    C     30     300
    #6    A     10     100
    #7    B     20     200
    #8    C     30     300
    

    如果您使用的是python3,则需要导入reduce()

    from functools import reduce
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2010-12-31
      • 2018-11-02
      相关资源
      最近更新 更多