【问题标题】:Create New Rows Based on Other Rows in Python?基于 Python 中的其他行创建新行?
【发布时间】:2020-07-02 20:36:19
【问题描述】:

df:

  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

每个月的流程都一样……

【问题讨论】:

    标签: python python-3.x pandas pyspark


    【解决方案1】:

    你可以选择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|
    +-----+----+-----+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 2019-04-03
      相关资源
      最近更新 更多