【问题标题】:Iterating through a dataframe with info from another dataframe使用来自另一个数据帧的信息迭代数据帧
【发布时间】:2019-05-06 21:21:04
【问题描述】:

我有一个问题,我认为更多的是关于逻辑而不是编码。我的目标是计算一辆卡车装载和充电的公里数。

我有两个数据框

让我们称之为第一次旅行:

Date         Licence   City             State    KM
01/05/2019   AAA-1111  Sao Paulo        SP       10
02/05/2019   AAA-1111  Santos           SP       10
03/05/2019   AAA-1111  Rio de Janeiro   RJ       20
04/05/2019   AAA-1111  Sao Paulo        SP       15
01/05/2019   AAA-2222  Curitiba         PR       20
02/05/2019   AAA-2222  Sao Paulo        SP       25

让我们调用第二张发票

Code Date       License  Origin    State Destiny        UF   Value
A1   01/05/2019 AAA-1111 Sao Paulo SP    Rio de Janeiro RJ   10.000,00
A2   01/05/2019 AAA-2222 Curitiba  PR    Sao Paulo      SP  15.000,00

我需要得到的是:

Date         Licence   City             State        KM  Code
01/05/2019   AAA-1111  Sao Paulo        SP       10  A1
02/05/2019   AAA-1111  Santos           SP       10  A1
03/05/2019   AAA-1111  Rio de Janeiro   RJ       20  A1
04/05/2019   AAA-1111  Sao Paulo        SP       15  Nan
01/05/2019   AAA-2222  Curitiba         PR       20  A2
02/05/2019   AAA-2222  Sao Paulo        SP       25  A2

正如我所说,更多的是逻辑问题。卡车在圣保罗的初始点装货。如果我没有货物交付的日期,我如何知道它通过 Santos 装载然后去里约热内卢,如何遍历行?

tks

【问题讨论】:

    标签: python pandas iteration


    【解决方案1】:

    假设第一个数据帧(df1)中的行已排序,这就是我要做的:

    注意:下面我使用df1 用于旅行,df2 用于发票

    1. 使用对匹配两个数据帧有效的尽可能多的信息与 df1(左)和 df2(右)进行左连接,以便我们可以在 df1 中找到行程的 Origin 行。在我的测试中,我使用的字段是:['Date', 'License', 'City', 'State'],将结果保存在一个新的数据框df3

      df3 = df1.merge(df2[df2.columns[:6]].rename(columns={'Origin':'City'})
              , on = ['Date', 'License', 'City', 'State']
              , how = 'left'
      )
      

    2. ffill()填充df3.Desitiny中的NULL值

      df3['Destiny'] = df3.Destiny.ffill()
      
    3. 通过以下标志设置组标签:

      g = (~df3.Code.isnull() | (df3.shift().City == df3.Destiny)).cumsum()
      

      注意:我在上图中添加了df3['g']供参考

    4. 根据上述组标签使用 ffill() 更新 df3.Code。

      df3['Code'] = df3.groupby(g).Code.ffill()
      

    【讨论】:

      猜你喜欢
      • 2021-06-11
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2021-09-22
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      相关资源
      最近更新 更多