【问题标题】:Pandas merging two rows with regex conditionsPandas 将两行与正则表达式条件合并
【发布时间】:2019-08-07 23:41:58
【问题描述】:

假设我有一个数据框:

    name                                            lat         lon
0   Changchong-Luya Creek (Sta. 0+000-1+680) Start  15.085700   120.919967
1   Sudan Creek (Sta. 0+000 - 3+200) Start          15.073000   120.915930
2   Sudan Creek (Sta. 0+000 - 3+200) End            15.079350   120.893350
3   Nikko Boss Creek (Sta. 0+000 - 3+000) Start     15.079980   120.912930
4   Nikko Boss Creek (Sta. 0+000 - 3+000) End       15.076720   120.925670

如果满足条件我想合并两行:

  1. 他们是同一条小溪
  2. 如果一个是起点,另一个是同一条小溪的终点

生成的数据框是:

  name                  start_lat  start_lon  end_lat    end_lon   
0 Sudan Creek           15.073000 120.915930  15.079350  120.893350
1 Nikko Boss Creek      15.079980 120.912930  15.076720  120.925670

我已经遍历了这些行,但是也许有一些熊猫方式与正则表达式的混合?

【问题讨论】:

    标签: python regex pandas merge


    【解决方案1】:

    这是我的方法:

    # extract the information and join
    new_df = df.join(df['name'].str.extract('(.*) \(.*\) (Start|End)'))
    
    # pivot 
    new_df = new_df.pivot(index=0, columns=1, values=['lat','lon'])
    
    # flatten column names
    new_df.columns = [f'{b.lower()}_{a}' for a,b in new_df.columns]
    
    # remove nan
    new_df.dropna(how='any')
    

    输出:

                       end_lat  start_lat    end_lon  start_lon
    0                                                          
    Nikko Boss Creek  15.07672   15.07998  120.92567  120.91293
    Sudan Creek       15.07935   15.07300  120.89335  120.91593
    

    【讨论】:

    • 我遇到了这个错误:Index contains duplicate entries, cannot reshape
    • 这通常意味着您有重复的条目(小溪名称)。
    • 在第一个join 命令之后,运行new_df[new_df.duplicated([0,1], keep=True)] 以查看您的小溪名称是否有任何重复。
    • 抱歉,我的意思是 False 保留所有重复项。
    • 那是用来审核的。您可以使用new_df.drop_duplicates([0,1]) 删除。
    猜你喜欢
    • 2023-01-30
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多