我不知道這是否是最有效的方式去了解它,但是這是我想出了
import pandas as pd
import random
# Prepare the sample dataset
table = []
for i in range(100000):
row = {'key1': random.choice('ABC'),
'key2': random.choice('KLM'),
'key3': random.choice('XYZ'),
'val' : random.randint(0,500)}
table.append(row)
df = pd.DataFrame(table)
# Aggregate the first level
dict_agg = (df.groupby('key1')
.sum()
.rename(columns={'val':'sum'})
.to_dict('index'))
# Convert from numpy.int64 to Python scalar
for idx, value in dict_agg.items():
dict_agg[idx]['sum'] = int(dict_agg[idx]['sum'])
# Aggregate the second level
df_lvl2 = (df.groupby(['key1','key2'])
.sum()
.rename(columns={'val':'sum'})
.to_dict('index'))
# Assign the second level aggregation
for idx, value in df_lvl2.items():
dict_agg[idx[0]][idx[1]] = {'sum': int(value['sum'])}
# Aggregate the final level
df_lvl3 = (df.groupby(['key1','key2','key3'])
.sum()
.rename(columns={'val':'sum'})
.to_dict('index'))
# Assign the third level aggregation
for idx, value in df_lvl3.items():
dict_agg[idx[0]][idx[1]][idx[2]] = {'sum': int(value['sum'])}
最終的結果將是這樣的:
{'A': {'K': {'X': {'sum': 929178},
'Y': {'sum': 940925},
'Z': {'sum': 938008},
'sum': 2808111},
'L': {'X': {'sum': 902581},
'Y': {'sum': 953821},
'Z': {'sum': 942942},
'sum': 2799344},
'M': {'X': {'sum': 930117},
'Y': {'sum': 929257},
'Z': {'sum': 910905},
'sum': 2770279},
'sum': 8377734},
'B': {'K': {'X': {'sum': 888818},
…
由於這是一個dict
,你需要將其轉換成JSON,通過做:
import json
output = json.dumps(dict_agg)
因爲我有多個列進行求和。在總結部分我正在這樣做。對於第一級:'df.groupby('key1')['col1']。sum()'。 to_dict('index')失敗。 – bashhike
。重命名位失敗。 'to_dict('index')'也失敗了。 '.to_dict()'雖然工作。 – bashhike
雖然感謝。這有助於。我可以從這工作。 :) – bashhike