在熊猫数据框中使用groupby和聚合时,如何从另一列连接日期

斯里坎特

我最初具有以下数据帧,然后执行groupby和汇总以连接重叠的时间范围。我想在最终数据框中添加另一列,并且该列将由重叠行上的数据串联而成。

df['newid']=(df['START']-df['END'].shift()).dt.total_seconds().gt(0).cumsum()
print (df.to_string(index=False))

                ELEMENT                                    TEXT               START                 END  newid
 OLT2227-LT3-PON0-ONT03           USECASE1 - ALARM1 -NO OVERLAP 2021-01-19 18:00:00 2021-01-19 19:00:00      0
 OLT2227-LT3-PON0-ONT03          USECASE1 - ALARM2 - NO OVERLAP 2021-01-19 19:10:00 2021-01-19 20:00:12      1
 OLT2227-LT3-PON0-ONT05     USECASE2 - ALARM1 - Fully Contained 2021-01-19 18:00:00 2021-01-19 23:00:00      1
 OLT2227-LT3-PON0-ONT05     USECASE2 - ALARM2 - Fully Contained 2021-01-19 19:00:00 2021-01-19 20:00:12      1
 OLT2227-LT3-PON0-ONT10  USECASE3 - ALARM1 - START-END-RELATION 2021-01-19 22:00:00 2021-01-19 22:30:00      2
 OLT2227-LT3-PON0-ONT10  USECASE3 - ALARM2 - START-END-RELATION 2021-01-19 22:30:00 2021-01-19 23:00:12      2
 OLT2227-LT3-PON0-ONT21                         USECASE3-ALARM1 2021-01-19 22:00:00 2021-01-19 22:10:00      2
 OLT2227-LT3-PON0-ONT21                  USECASE3-ALARM2-NO-END 2021-01-19 22:15:00 2042-01-19 20:00:12      3
  OLT2227-LT3-PON0-ONT4                               USECASE-4 2021-01-19 17:30:00 2042-01-19 20:00:12      3
  OLT2227-LT3-PON0-ONT4                               USECASE-4 2021-01-19 20:00:00 2021-01-19 23:00:00      3
 OLT2227-LT3-PON0-ONT99                               USECASE-5 2021-01-19 17:30:00 2021-01-19 22:00:00      3
 OLT2227-LT3-PON0-ONT99                               USECASE-5 2021-01-19 20:00:00 2042-01-19 20:00:12      3

newdf=df.groupby(['newid','ELEMENT']).agg({'START':'min','END':'max'}).reset_index(level=1)
print (newdf.to_string(index=False))

                ELEMENT               START                 END
 OLT2227-LT3-PON0-ONT03 2021-01-19 18:00:00 2021-01-19 19:00:00
 OLT2227-LT3-PON0-ONT03 2021-01-19 19:10:00 2021-01-19 20:00:12
 OLT2227-LT3-PON0-ONT05 2021-01-19 18:00:00 2021-01-19 23:00:00
 OLT2227-LT3-PON0-ONT10 2021-01-19 22:00:00 2021-01-19 23:00:12
 OLT2227-LT3-PON0-ONT21 2021-01-19 22:00:00 2021-01-19 22:10:00
 OLT2227-LT3-PON0-ONT21 2021-01-19 22:15:00 2042-01-19 20:00:12
  OLT2227-LT3-PON0-ONT4 2021-01-19 17:30:00 2042-01-19 20:00:12
 OLT2227-LT3-PON0-ONT99 2021-01-19 17:30:00 2042-01-19 20:00:12

如您所见,在最后一个数据框中,我仅获得ELEMENT,START和END列。但是,我想得到的是一个将在聚合过程中连接TEXT列的数据框。

                ELEMENT               START                 END                    TEXT
 OLT2227-LT3-PON0-ONT03 2021-01-19 18:00:00 2021-01-19 19:00:00     USECASE1 - ALARM1 -NO OVERLAP
 OLT2227-LT3-PON0-ONT03 2021-01-19 19:10:00 2021-01-19 20:00:12     USECASE1 - ALARM2 - NO OVERLAP
 OLT2227-LT3-PON0-ONT05 2021-01-19 18:00:00 2021-01-19 23:00:00     USECASE2 - ALARM1 - Fully Contained; USECASE2 - ALARM2 - Fully Contained
 OLT2227-LT3-PON0-ONT10 2021-01-19 22:00:00 2021-01-19 23:00:12     USECASE3 - ALARM1 - START-END-RELATION; USECASE3 - ALARM2 - START-END-RELATION
 OLT2227-LT3-PON0-ONT21 2021-01-19 22:00:00 2021-01-19 22:10:00     USECASE3-ALARM1
 OLT2227-LT3-PON0-ONT21 2021-01-19 22:15:00 2042-01-19 20:00:12     USECASE3-ALARM2-NO-END 
  OLT2227-LT3-PON0-ONT4 2021-01-19 17:30:00 2042-01-19 20:00:12     USECASE-4 ; USECASE-4
 OLT2227-LT3-PON0-ONT99 2021-01-19 17:30:00 2042-01-19 20:00:12     USECASE-5 ; USECASE-5
 

有人可以帮忙吗?

保罗·C

您可以聚合方法str.join

(df.groupby(['newid','ELEMENT'])
    .agg({'START': 'min', 'END':'max', 'TEXT': ' ; '.join})
    .reset_index(1))

输出(仅TEXT列):

USECASE1 - ALARM1 -NO OVERLAP
USECASE1 - ALARM2 - NO OVERLAP
USECASE2 - ALARM1 - Fully Contained ; USECASE2 - ALARM2 - Fully Contained
USECASE3 - ALARM1 - START-END-RELATION ; USECASE3 - ALARM2 - START-END-RELATION
USECASE3-ALARM1
USECASE3-ALARM2-NO-END
USECASE-4 ; USECASE-4
USECASE-5 ; USECASE-5

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫根据日期范围和另一列过滤数据框

如何使用非唯一列将具有求和值的熊猫Groupby数据框映射到另一个数据框

在熊猫数据框中使用groupby时如何连接设置?

使用熊猫,如果另一列不为空,如何使用数据框查找列值?

熊猫数据框-如何创建条件和,条件取决于数据框中的另一列

在熊猫数据框中按另一列分组后如何插入缺失的日期并向前填充列

熊猫:将一个数据框的特定列连接到另一列

如何检查熊猫数据框中一列对另一列的依赖性

如何调节一列的循环以填充熊猫数据框中的另一列值

熊猫聚合数据框仅返回一列

如何在熊猫中使用groupby保持具有另一列最高值的列的值

如何过滤数据框并根据熊猫数据框中的另一列获取记录总数?

如何使用数据框和熊猫检查列中的字符串是否是另一列中的子字符串

熊猫根据另一列添加日期和日期

使用熊猫数据帧如何聚合和GROUPBY和非聚集/ GROUPBY列带来

如何使用groupby.first()将数据框列的值替换为另一列的值?

在Pandas数据框中使用groupby时,如何根据上一行中的值增加一列?

过滤基于另一列的熊猫数据框

如何用熊猫数据框另一列中的句子部分创建新列?

如何将数据框列拆分为熊猫中的另一列?

如何删除熊猫数据框列中与另一列中的单词匹配的单词

如何根据另一列中满足的条件在熊猫数据框中添加新列?

在groupby之后,使用数据框列联接另一列的值

如果一列的字符串包含熊猫数据框中另一列的单词,如何删除整行

熊猫:如何按一列的日期对数据框行进行排序

使用字典参考另一列值来映射熊猫数据框的一列中的缺失值

如何更改熊猫数据框中某个类别的另一列中的值?

Python - 如何根据另一列中的条目(列表)搜索熊猫数据框中的条目?

Pandas 在日期时间索引和另一列上合并数据框