Pandas 为另一列红移的每个值添加具有固定值的列

Pandas 为另一列红移的每个值添加具有固定值的列,pandas,amazon-redshift,multiple-columns,Pandas,Amazon Redshift,Multiple Columns,我有下表 ] 要为每个用户添加日期范围吗 如何做到这一点: 如果这可以通过红移查询实现,那么这将非常有用 若并没有,那个么在python中创建这个数据的有效方法就是使用8lk记录 给定此数据帧df: 您可以使用numpy和: 结果: userid username date 0 1 a 2020-01-01 1 1 a 2020-01-02 2 1 a 2020-01-03 3 2 b

我有下表

]

要为每个用户添加日期范围吗

如何做到这一点:

如果这可以通过红移查询实现,那么这将非常有用

若并没有,那个么在python中创建这个数据的有效方法就是使用8lk记录

给定此数据帧df:

您可以使用numpy和:

结果:

  userid username       date
0      1        a 2020-01-01
1      1        a 2020-01-02
2      1        a 2020-01-03
3      2        b 2020-01-01
4      2        b 2020-01-02
5      2        b 2020-01-03
6      3        c 2020-01-01
7      3        c 2020-01-02
8      3        c 2020-01-03
给定此数据帧df:

您可以使用numpy和:

结果:

  userid username       date
0      1        a 2020-01-01
1      1        a 2020-01-02
2      1        a 2020-01-03
3      2        b 2020-01-01
4      2        b 2020-01-02
5      2        b 2020-01-03
6      3        c 2020-01-01
7      3        c 2020-01-02
8      3        c 2020-01-03

在Sql中,这也很简单——只需交叉连接要添加到每行的日期列表即可。您可以看到,在您的示例中,3行和3个日期的结果是9行。未经测试的解释代码:

select userid, username, "date" from <table> cross join (select values ('2020-01-01'::date), ('2020-02-01'::date), ('2020-03-01'::date));
现在,简单方法的问题是,如果你处理的是大表和长长的日期列表,乘法运算会把你累死。1000亿行乘以5000个日期等于15万亿行——这样做需要很长时间,而且存储需要大量磁盘空间。对于小表格和简短的日期列表,这很好


如果你在事情的重要方面,你可能需要重新思考你想做什么。由于您使用的是红移,因此可能需要执行此操作。

在Sql中,这也很简单-只需交叉连接要添加到每行的日期列表即可复制行。您可以看到,在您的示例中,3行和3个日期的结果是9行。未经测试的解释代码:

select userid, username, "date" from <table> cross join (select values ('2020-01-01'::date), ('2020-02-01'::date), ('2020-03-01'::date));
现在,简单方法的问题是,如果你处理的是大表和长长的日期列表,乘法运算会把你累死。1000亿行乘以5000个日期等于15万亿行——这样做需要很长时间,而且存储需要大量磁盘空间。对于小表格和简短的日期列表,这很好


如果你在事情的重要方面,你可能需要重新思考你想做什么。由于您使用的是红移,因此可能需要执行此操作。

这是笛卡尔乘积,在python和sql中都非常简单。这是笛卡尔乘积,在python和sql中都非常简单。请尝试使用merge从dr创建数据帧并分配一个伪列pd.mergedf.assignkey='var1',dr.assignkey='var1',打开“键”,放下“键”,1@Datanovice:这也很有效,是一个不错的解决方案,但即使对于玩具数据合并,如果比numpy解决方案慢5倍,OP也会要求一个有效的解决方案way@Stefnumpy是最好的,只需几秒钟就可以执行超过8lk的记录。谢谢。你的解决方案也很有效,但是因为合并而花费了太多时间。感谢您尝试使用merge从dr创建一个数据帧,并分配一个伪列pd.mergedf.assignkey='var1',dr.assignkey='var1',on='key'。drop'key',1@Datanovice:这也很有效,是一个不错的解决方案,但即使对于玩具数据合并,如果比numpy解决方案慢5倍,OP也会要求一个有效的解决方案way@Stefnumpy是最好的,执行超过8lk的记录需要几秒钟的时间。谢谢。你的解决方案也很有效,但是因为合并而花费了太多时间。非常感谢。