python - 基于 Python 中的其他行创建新行?
问题描述
东风:
Date Month year Month_yr
0 Jul 19 Jul 19 Jul_2019
1 Ogf 19 Jul 19 Jul_2019
2 May19 May 19 May_2019
3 May 19 May 19 May_2019
4 19May May 19 May_2019
5 Jun19 Jun 19 Jun_2019
6 Jun 19 Jun 19 Jun_2019
7 May 20 May 20 May_2019
8 20May May 20 May_2019
9 Jun20 Jun 20 Jun_2019
10 Jun 20 Jun 20 Jun_2019
我想根据去年的月份和年份创建一个新行。例如,在我的 df 中,直到月份 = 六月和年 = 20 已填充,所以我需要为年 = 20 填写七月月份,因为我需要检查去年的月份 = 七月和年 = 19,我看到两个记录即
0 Jul 19 Jul 19 Jul_2019
1 Ogf 19 Jul 19 Jul_2019
输出:
Date Month year Month_yr
0 Jul 19 Jul 19 Jul_2019
1 Ogf 19 Jul 19 Jul_2019
2 May19 May 19 May_2019
3 May 19 May 19 May_2019
4 19May May 19 May_2019
5 Jun19 Jun 19 Jun_2019
6 Jun 19 Jun 19 Jun_2019
7 May 20 May 20 May_2019
8 20May May 20 May_2019
9 Jun20 Jun 20 Jun_2019
10 Jun 20 Jun 20 Jun_2019
11 Jul 20 Jul 20 Jul_2019
12 Ogf 20 Jul 20 Jul_2019
每个月的相同过程等等......
解决方案
可以选择第19年,所有大于第20年最后一个月的记录,并合并它们
import pyspark.sql.functions as F
# Test data
dfs = sqlContext.createDataFrame([('Jan',19,1),('Feb',19,1),('Mar',19,1),('Aug',19,5),('Sep',19,1),('Dec',19,1),('Jan',20,6),('Feb',20,8),('Feb',20,7),('Mar',20,8)],schema=['month','year','value'])
# convert month to a date column
df_mnth = dfs.withColumn("mnth_format",F.to_date('month',format='MMM'))
# Find the maximum month from year 20
max_month = ((df_mnth.filter('year=20').select(F.max('mnth_format').alias('max'))).collect())[0]['max']
# Select all rows later that latest month in 20 from year 19 and replace them with year 20
df_res = df_mnth.filter((F.col('year')==19)& (F.col('mnth_format')>max_month)).replace(19,20,subset='year')
#union them
df_fin =df_mnth.union(df_res.select(df_mnth.columns)).drop('mnth_format')
结果:
+-----+----+-----+
|month|year|value|
+-----+----+-----+
| Jan| 19| 1|
| Feb| 19| 1|
| Mar| 19| 1|
| Aug| 19| 5|
| Sep| 19| 1|
| Dec| 19| 1|
| Jan| 20| 6|
| Feb| 20| 8|
| Feb| 20| 7|
| Mar| 20| 8|
| Aug| 20| 5|
| Sep| 20| 1|
| Dec| 20| 1|
+-----+----+-----+
推荐阅读
- reactjs - Next.js Router.push() 自动重新加载页面
- javascript - 仅当一个 Redis 事务中的列表为空时如何推送?
- c# - 为什么 IndexOf Soft hyphen 返回 0 作为字符串?
- windows - Windows SDK 10 安装程序无法运行
- javascript - 为什么 document.execCommand 在 reactjs 中不起作用?
- laravel - Laravel 使用查询生成器插入
- r - 如何在绘图函数中删除对数刻度之间的数字?
- c++ - 绘制两种不同的形状会相互覆盖[Core Profile OpenGL]
- c# - 无法将浮点类型隐式转换为 int。存在显式转换(您是否缺少演员表?)
- python - Python内存消耗:如何从进程中清除内存?