【发布时间】:2021-10-22 21:52:51
【问题描述】:
我在尝试创建嵌套字典时遇到问题,其中内部嵌套使用一系列值。
这是一个简单的数据框:
import pandas as pd
import random
catGrpAll = ['Category_A']*3 + ['Category_B']*3
catGrpAll = catGrpAll*4
codeGrpAll = ['code1','code2','code3']
codeGrpAll = codeGrpAll*8
dateGrpAll = [pd.to_datetime('2021-03-31')]*6 + [pd.to_datetime('2021-04-30')]*6 +\
[pd.to_datetime('2021-05-31')]*6 + [pd.to_datetime('2021-06-30')]*6
random.seed(0)
numAll = [ random.randint(100, 5000) for _ in range(24)]
df = pd.DataFrame(data={'Category':catGrpAll,
'Code':codeGrpAll,
'Time':dateGrpAll,
'Amount':numAll})
del catGrpAll,codeGrpAll,dateGrpAll,numAll
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Category 24 non-null object
1 Code 24 non-null object
2 Time 24 non-null datetime64[ns]
3 Amount 24 non-null int64
df.head()
Out[294]:
Category Code Time Amount
0 Category_A code1 2021-03-31 3255
1 Category_A code2 2021-03-31 3545
2 Category_A code3 2021-03-31 431
3 Category_B code1 2021-03-31 2221
4 Category_B code2 2021-03-31 4288
我希望得到这样的结果: 第一个键值对将是类别代码 内部字典是代码系列
nested_dict = {
'Category_A': [
{ 'code1': Series(Time/Amount),
'code2': Series(Time/Amount),
'code2': Series(Time/Amount) }
],
'Category_B': [
{ 'code1': Series(Time/Amount),
'code2': Series(Time/Amount),
'code2': Series(Time/Amount) }
]
}
任何帮助将不胜感激
########################已更新##################### ################## 这是我希望字典看起来如何但想知道是否有办法避免循环的示例?
data = {}
category = df.Category.unique()
code = df.Code.unique()
for i in category:
data[i] = {}
for j in code:
data[i][j] = []
for i in category:
for j in code:
data[i][j] = df[(df.Category == i) & (df.Code == j)]
data[i][j].index = data[i][j]['Time']
data[i][j] = data[i][j]['Amount']
【问题讨论】:
标签: python pandas dictionary nested