python dataframe合并行后保留最新日期_合并spark datafram中的日期范围

该博客通过一个实例展示了如何使用Pandas和Spark SQL在Python中合并DataFrame的行,特别是在处理连续日期区间时。首先创建了一个包含FruitID、FruitType、StartDate和EndDate的DataFrame,然后利用Window函数和lag函数识别连续的日期组,并通过groupBy和agg函数聚合这些组,最终保留每个组的最早StartDate和最晚EndDate。
摘要由CSDN通过智能技术生成

我们可以使用Window和lag函数来计算连续的组,然后以与您共享的Pandas函数类似的方式聚合这些组。下面给出了一个工作实例,希望对您有所帮助!在import pandas as pd

from dateutil.parser import parse

from pyspark.sql.window import Window

import pyspark.sql.functions as F

# EXAMPLE DATA -

pdf = pd.DataFrame.from_items([('FruitID', [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]),

('FruitType', ['Apple', 'Apple', 'Apple', 'Orange', 'Orange', 'Orange', 'Banana', 'Banana', 'Blueberry', 'Mango', 'Kiwi', 'Mango']),

('StartDate', [parse(x) for x in ['2015-01-01', '2016-01-01', '2017-01-01', '2015-01-01', '2016-05-31',

'2017-01-01', '2015-01-01', '2016-01-01', '2017-01-01', '2015-01-01', '2016-09-15', '2017-01-01']]),

('EndDate', [parse(x) for x in ['2016-01-01', '2017-01-01', '2018-01-01', '2016-01-01', '2017-01-01',

'2018-01-01', '2016-01-01', '2017-01-01', '2018-01-01', '2016-01-01', '2017-01-01', '2018-01-01']])

])

pdf.sort_values(['FruitID', 'StartDate'])

df = sqlContext.createDataFrame(pdf)

# FIND CONTIGUOUS GROUPS AND AGGREGATE -

w = Window.partitionBy("FruitType").orderBy("StartDate")

contiguous = F.when(F.datediff(F.lag("EndDate", 1).over(w),F.col("StartDate"))!=0,F.lit(1)).otherwise(F.lit(0))

df = (df

.withColumn('contiguous_grp', F.sum(contiguous).over(w))

.groupBy('FruitType','contiguous_grp')

.agg(F.first('StartDate').alias('StartDate'),F.last('EndDate').alias('EndDate'))

.drop('contiguous_grp'))

df.show()

输出:

^{pr2}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值