gpt4 book ai didi

python - 有条件地连接 groupby 聚合函数中的字符串

转载 作者:行者123 更新时间:2023-12-01 06:41:46 25 4
gpt4 key购买 nike

我有一个数据集,需要在单个字段上进行分组并在多个字段上进行聚合。作为聚合的一部分,我需要有条件地按排序顺序连接字符串列值。

输入:

SYSTIME             TT  REC TABLE   cat_a   cat_b   cat_c
01/11/2019 00:00 2 102 A 1 0 0
01/11/2019 00:00 2 103 B 1 0 0
01/11/2019 00:00 2 150 C 0 1 0
01/11/2019 00:01 3 200 B 1 0 0
01/11/2019 00:01 3 150 A 1 0 0
01/11/2019 00:01 3 104 D 0 0 1
01/11/2019 00:02 4 200 F 1 0 0
01/11/2019 00:02 5 250 A 1 0 0
01/11/2019 00:02 2 120 C 0 1 0
01/11/2019 00:02 3 150 E 1 0 0

预期输出:

SYSTIME             TT  REC TABLE   cat_a   cat_b   cat_c
01/11/2019 00:00 2 355 A;B 2 1 0
01/11/2019 00:01 3 454 A;B 2 0 1
01/11/2019 00:02 5 520 A;E;F 3 1 0

我有以下代码:

df_table_acc=df.groupby(['SYSTIME'],as_index=False).agg({'TT' : 'max','REC' : 'sum','TABLE': ';'. join, 'cat_a': 'sum', 'cat_b': 'sum', 'cat_c': 'sum'})

问题在于字符串连接,我想连接 cat_a=1 的 TABLE 值以及排序顺序。目前我在 00:00 分钟得到 A;B;C,但预计只有 A;B,其中 cat_a=1

有没有办法在连接函数中添加条件?

P.S:我是 python 新手,我确实看到了类似的问题,但我想特别在 agg 函数中添加条件

最佳答案

我无法在 agg 中找到执行此操作的方法,因此如果有人这样做,请说出来。

但是,它可以在 agg 之外轻松完成,方法是:

df_table_acc=df.groupby(['SYSTIME'],as_index=False).agg(    #Remove TABLE from first agg
{'TT' : 'max','REC' : 'sum', 'cat_a': 'sum', 'cat_b': 'sum', 'cat_c': 'sum'})
df_table_acc = pd.merge(df_table_acc, df[df['cat_a']>0].copy().groupby(['SYSTIME'],as_index=False).agg(
{'TABLE':';'.join}),how='left',on='SYSTIME')

这是针对索引问题进行编辑的。我们现在在 SYSTIME 上使用 merge 来确保 TABLESYSTIME

匹配

或者,通过更改数据,然后进行一些清理(编辑:修复了这部分并添加了更好的分离)

import re
df['TABLE'] = df.apply(lambda x: x['TABLE'] if x['cat_a']>0 else '', axis=1)
df_table_acc=df.groupby(['SYSTIME'],as_index=False).agg(
{'TT' : 'max','REC' : 'sum','TABLE': ';'.join,
'cat_a': 'sum', 'cat_b': 'sum', 'cat_c': 'sum'})
df_table_acc.TABLE = df_table_acc.TABLE.apply(lambda x: re.sub(';+',';',x).strip(';'))
#Quick explanation: the re part avoids having repeat ";" eg: "A;;C;D;;G" -> "A;C;D;G"
#The strip removes outside strings eg: ";A;B;" -> "A;B"

在使用第二种方法之前,请确保您不需要使用 TABLE 列来执行其他任何操作,或者使用诸如 TABLE2 之类的虚拟列。

关于python - 有条件地连接 groupby 聚合函数中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59422882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com