代码之家  ›  专栏  ›  技术社区  ›  ddd

Pandas聚合:如何从一个列生成多个新列,反之亦然

  •  1
  • ddd  · 技术社区  · 6 年前

    我正在预处理以下内容 Pandas 数据帧。

    a

    assetid ,我想找到第一个和最后一个 AccountingDate 并创建另一列 isSold 记帐日期 .

    if AccountingDate of all deals for same assetid is Null:
        isSold = False
    else:
        isSold = True
    

    同时,我想找出 阿塞蒂德 Amount 第一个和最后一个 记帐日期 .

    一般来说 groupby 熊猫 就像这样:

    df.groupby('assetid').agg({'A', func})
    

    但是我的聚合函数要复杂得多,从 生成3列 FirstAccountingDate , LastAccountingDate , 伊索尔德 记帐日期 组合,生成 FirstDealAmount LastDealAmount .

    1 回复  |  直到 6 年前
        1
  •  1
  •   Dawei    6 年前

    如果你想得到 first date last date ,并检查它们是否都是 null . 你可以通过下面的代码来完成。

    print(df)
    
      assetId       date
    0      1,        NaT
    1      1, 2018-10-01
    2      1, 2018-10-02
    3      1, 2018-10-03
    4      4,        NaT
    5      4,        NaT
    
    def isSold(date_array):
        last = date_array.max()
        first = date_array.min()
        return pd.isnull(last) & pd.isnull(last)
    
    result = df.groupby("assetId").date.apply(isSold).reset_index()
    print(result)
    

    它给出:

      assetId   date
    0      1,  False
    1      4,   True