python - 聚合一个大熊猫数据框
问题描述
我有一个数据框,其中列出了 SystemID 以及在某些日期发生的某些类型和类别的警报数量:
df
SystemID AlarmClass AlarmType Day AlarmCount
0 95EE8B57-6BE9-4175-B901-B6B3BEE1844D Service Unexpected Status 06/08/2018 3
1 95EE8B57-6BE9-4175-B901-B6B3BEE1844D Service Unexpected Status 05/08/2018 2
2 95EE8B57-6BE9-4175-B901-B6B3BEE1844D Service Unexpected Status 06/08/2018 1
3 5F891F03-3114-4E62-9A7D-CD2A04061364 Service Unexpected Status 04/08/2018 2
4 5F891F03-3114-4E62-9A7D-CD2A04061364 Service Unexpected Status 04/08/2018 2
5 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-AL
0 95EE8B57-6BE9-4175-B901-B6B3BEE1844D 06/08/2018 4 0 4 0
1 95EE8B57-6BE9-4175-B901-B6B3BEE1844D 05/08/2018 2 0 2 0
2 5F891F03-3114-4E62-9A7D-CD2A04061364 04/08/2018 4 0 4 0
3 5F891F03-3114-4E62-9A7D-CD2A04061364 05/08/2018 0 2 0 2
如何最有效地做到这一点?数据框有数百万条记录。
解决方案
为了提高性能,您可以为每个 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
推荐阅读
- javascript - 为什么我不能使用 Flow 将 JavaScript React 中的布尔值与布尔值进行比较?
- verilog - Synopsys Synplify Pro 在使用“``”时综合失败
- sql-server - 在 VB.Net 上将数据库表数据显示到列表视图时出错
- r - 提取与字符串中第 n 个位置的二进制值匹配的行
- operating-system - 如何在 Windows 10 上关闭和打开以太网连接?
- dart - 如何在颤动中截取屏幕之外的小部件屏幕截图?
- android - 使用安卓智能手机作为开发平台
- ios - UITextView 不显示
- jmeter - 如何使用 JMeter 发送仅限 http 的 cookie?
- spring-security - 在 Spring oauth2 中使用类 ResourceServerConfiguration.configure 中的 HttpSecurity.requestMatchers