[英]Aggregating a large pandas dataframe
我有一個數據框,其中列出了在某些日期發生的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.