Python 如何将关联的数据帧数据导出到字典中?
我想将以下风格的数据帧放入字典中 输入:Python 如何将关联的数据帧数据导出到字典中?,python,pandas,dictionary,nested,data-science,Python,Pandas,Dictionary,Nested,Data Science,我想将以下风格的数据帧放入字典中 输入: >>>import pandas as pd >>>df = pd.read_csv('file.csv') >>>print(df) Market Rep Name Date Amount 0 A1 B1 C1 D1 1 1 A1 B1 C1 D1 2 2 A1 B1 C1 D2 3 3 A1
>>>import pandas as pd
>>>df = pd.read_csv('file.csv')
>>>print(df)
Market Rep Name Date Amount
0 A1 B1 C1 D1 1
1 A1 B1 C1 D1 2
2 A1 B1 C1 D2 3
3 A1 B1 C1 D2 4
4 A1 B1 C2 D1 5
5 A1 B1 C2 D1 6
6 A1 B1 C2 D2 7
7 A1 B1 C2 D2 8
8 A1 B2 C3 D1 9
9 A1 B2 C3 D1 10
10 A1 B2 C3 D2 11
11 A1 B2 C3 D2 12
12 A2 B3 C4 D1 13
13 A2 B3 C4 D1 14
期望输出:
>>> print(associated_data)
{'A1': {'B1': {'C1': {'D1':[1 + 2],
{'D2':[3 + 4]},
'C2': {'D1':[5 + 6],
'D2':[7 + 8]}}
{'B2': {'C3': {'D1':[9 + 10],
'D2':[11 + 12]}}},
'A2': {'B3': {'C4': {'D1':[13 + 14]}}}}
这可能不是组织和排序数据的最佳方式,因此我愿意提出建议
我尝试了一种方法,我希望它能起作用,通过大量的for循环,如下所示:
# Main function
for market in df['Market'].unique():
market_data = self.df.loc[self.df['Market'] == market]
associated_reps = market_data['Rep'].unique()
# Repeat
for rep in associated_reps:
rep_data = market_data.loc[market_data['Rep'] == rep]
associated_names = rep_data['Name'].unique()
# Repeat
for name in associated_names:
name_data = rep_data.loc[rep_data['Name'] == name]
associated_dates = name_data['Date'].unique()
# Repeat
for date in associated_dates:
date_data = name_data.loc[name_data['Date'] == date]
associated_amount = sum(date_data['Amount'].tolist())
# Attempted solution code (total fail)
breakdown[market][rep][name][date] = associated_amount
这会适当地分离所有数据,并在最后尝试将所有数据放在一起。我希望你能制作一个这样的超级嵌套dict,但它完全失败了(因为事实证明,dict不是这样工作的)
如何生成所需的输出以产生相同的结果(可能还需要更短的排序代码)
谢谢 遍历行+值应该可以工作
dict_values = {}
for idx, row in df.iterrows():
A, B, C, D, Amount = row
if A not in dict_values.keys():
dict_values[A]={}
if B not in dict_values[A].keys():
dict_values[A][B]={}
if C not in dict_values[A][B].keys():
dict_values[A][B][C]={}
if D not in dict_values[A][B][C].keys():
dict_values[A][B][C][D]=[Amount]
else:
dict_values[A][B][C][D].append(Amount)
发布了类似的问题,例如,请参阅,但下面的解决方案将起作用
导入pprint
将numpy作为np导入
def制造指令(指示值、d、v):
“”“将索引项累积为目录中的键。”
p=d
#获取最后一个但只有一个dict级别的句柄,如果它们
#他们不在场
对于ind_vals[:-1]中的ix:
#如有必要,替换为collection.OrderedDict。
p=p.setdefault(ix,{})
#设置感兴趣的实际值。
p[ind_vals[-1]]=v
#正确设置索引。
df=df.set_索引(['Market','Rep','Name','Date'])
#将值分组,这样我们就不会有重复的索引
df=df.groupby(level=df.index.names).apply(np.sum)
dct={}#必要时替换为collection.OrderedDict。
对于idx,df.iterrows()中的val:
制作目录(idx、dct、val.Amount)
pprint.pprint(dct)
#{'A1':{'B1':{'C1':{'D1':3,'D2':7},'C2':{'D1':11,'D2':15},
#'B2':{'C3':{'D1':19,'D2':23},
#'A2':{'B3':{'C4':{'D1':27}}
您真的想要输出中的字符串['1+2']
还是结果[1+2]
,也称[3]
?或者您正在尝试获取值列表[1,2]
?您是否尝试过将groupby
和添加到dict
(或添加到json
)?@G.Anderson将示例[1+2]添加到一起。在这种情况下,他们就像两个独立的销售。我还没有尝试过任何一种(直到现在才真正了解它们)。非常感谢您发布此帖子:)我与另一个共享为可能的副本的问题是,没有真正说明为什么有效。此外,数据要短得多,并且在列表中,而不是在字典中。