【问题标题】:pandas groupby concatination based on a conditionpandas groupby 根据条件连接
【发布时间】:2022-01-09 03:47:30
【问题描述】:

我有一个如下所示的数据框,我正在尝试加入名称,当类不为空时,

Name   class score
kumar   ""    ""
ram     10    14
ravi    ""    ""
tej     ""    ""
om      12    15

我想要的输出是,

Name      class score
kumarram    10    14
ravitejom   12    15

我尝试了 groupby 类,并添加为新系列,但长度不匹配,

my code:
    df['g1'] = df['class'].ne("").cumsum()
    df.loc[df["class"].ne(""), "Name"] = df.groupby("g1").apply(lambda x: " ".join(x["Name"].values)

【问题讨论】:

    标签: python pandas group-by


    【解决方案1】:

    在否定条件下找到带有cumsum 的块是正确的。但是,在这里,您可以反转 cumsum 之前的系列,因此块是从下往上计算的:

    blocks = df['score'].ne('""')[::-1].cumsum()
    df.groupby(blocks).agg({
        'Name':''.join,
        'class':'last',
        'score':'last'
    })
    

    输出:

                Name class score
    score                       
    1      ravitejom    12    15
    2       kumarram    10    14
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多