pandas groupby 根据条件连接

Posted

技术标签:

【中文标题】pandas groupby 根据条件连接【英文标题】:pandas groupby concatination based on a condition 【发布时间】: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)

【问题讨论】:

【参考方案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

【讨论】:

以上是关于pandas groupby 根据条件连接的主要内容,如果未能解决你的问题,请参考以下文章

Groupby并根据Pandas中的多个条件计算计数和均值

Pandas - 带条件公式的 Groupby

根据 pandas 数据框中的条件将 value_counts 与 groupby 函数一起使用并插入新列

Python pandas数据框根据条件分组

Python数据聚合和分组运算-GroupBy Mechanics

使用 groupby 的结果过滤 pandas 数据框