为了账号安全,请及时绑定邮箱和手机立即绑定

聚合大型熊猫数据框

聚合大型熊猫数据框

LEATH 2021-06-20 19:55:58
我有一个数据框,其中列出了 SystemID 以及在某些日期发生的某些类型和类别的警报数量:df                               SystemID         AlarmClass          AlarmType         Day  AlarmCount0  95EE8B57-6BE9-4175-B901-B6B3BEE1844D            Service  Unexpected Status  06/08/2018           31  95EE8B57-6BE9-4175-B901-B6B3BEE1844D            Service  Unexpected Status  05/08/2018           22  95EE8B57-6BE9-4175-B901-B6B3BEE1844D            Service  Unexpected Status  06/08/2018           13  5F891F03-3114-4E62-9A7D-CD2A04061364            Service  Unexpected Status  04/08/2018           24  5F891F03-3114-4E62-9A7D-CD2A04061364            Service  Unexpected Status  04/08/2018           25  5F891F03-3114-4E62-9A7D-CD2A04061364  Event Log Monitor    Application Log  05/08/2018           2我想通过对 SystemID 和 Day 进行分组并列出每种类型和类别的警报数量来汇总这些数据。上述数据框的结果如下所示:                               SystemID         Day  AlarmClass-S  AlarmClass-ELM  AlarmType-US  AlarmType-AL0  95EE8B57-6BE9-4175-B901-B6B3BEE1844D  06/08/2018             4               0             4             01  95EE8B57-6BE9-4175-B901-B6B3BEE1844D  05/08/2018             2               0             2             02  5F891F03-3114-4E62-9A7D-CD2A04061364  04/08/2018             4               0             4             03  5F891F03-3114-4E62-9A7D-CD2A04061364  05/08/2018             0               2             0             2如何最有效地做到这一点?数据框有数百万条记录。
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

为了提高性能,您可以为每个 AlarmClass 和 AlarmType 旋转数据,然后连接结果。


i = df.pivot_table(index=['SystemID', 'Day'], 

                   columns='AlarmClass', 

                   values='AlarmCount', 

                   aggfunc='sum', 

                   fill_value=0)

j = df.pivot_table(index=['SystemID', 'Day'], 

                   columns='AlarmType', 

                   values='AlarmCount', 

                   aggfunc='sum', 

                   fill_value=0)


i.columns = i.columns.map(lambda x: 'AlarmClass-' + ''.join(y[0] for y in x.split()))

j.columns = j.columns.map(lambda x: 'AlarmType-' + ''.join(y[0] for y in x.split()))


df = pd.concat([i, j], axis=1).reset_index()

print(df)

                               SystemID         Day  AlarmClass-ELM   \

0  5F891F03-3114-4E62-9A7D-CD2A04061364  04/08/2018               0             

1  5F891F03-3114-4E62-9A7D-CD2A04061364  05/08/2018               2             

2  95EE8B57-6BE9-4175-B901-B6B3BEE1844D  05/08/2018               0             

3  95EE8B57-6BE9-4175-B901-B6B3BEE1844D  06/08/2018               0             


AlarmClass-S  AlarmType-AL  AlarmType-US

           4             0             4

           0             2             0

           2             0             2

           4             0             4


查看完整回答
反对 回复 2021-06-29
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信