来自数据框的嵌套字典,内部字典包含熊猫系列作为值
Posted
技术标签:
【中文标题】来自数据框的嵌套字典,内部字典包含熊猫系列作为值【英文标题】:Nested Dictionary from dataframe with inner dictionary containing a pandas series as the value 【发布时间】: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']
【问题讨论】:
【参考方案1】:我没有看到任何提供您想要的输出的内置函数。最接近的是
df.to_records(orient='index')
您可以手动构建结果字典:
from collections import defaultdict
result = defaultdict(list)
for category, group in df.groupby('Category'):
result[category].append(
code: subgroup['Time'].to_list()
for code, subgroup in group.groupby('Code')
)
【讨论】:
以上是关于来自数据框的嵌套字典,内部字典包含熊猫系列作为值的主要内容,如果未能解决你的问题,请参考以下文章