dict的dict在应用后显示一个列表



我有一个DataFrame,就像这个:

import pandas pd
df = pd.DataFrame.from_dict({"name":["Spot1","Spot2"],2020:[{"product1":20.3,"product2":.93},{"product1":67,"product2":678}],2019:[{"product1":28,"product2":1003},{"product1":267,"product2":28}]})
name                    2020                                  2019
0   Spot1   {'product1': 20.3, 'product2': 0.93}    {'product1': 28, 'product2': 1003}
1   Spot2   {'product1': 67, 'product2': 678}   {'product1': 267, 'product2': 28}

我的目标是将引用年份的列连接在json:中,使其具有这种类型的结构

name                                        chronology
0   Spot1   {'2020':{'product1': 20.3, 'product2': 0.93}, '2019':{'product1': 28, 'product2': 1003}}
1   Spot2   {'2020':{'product1': 67, 'product2': 678},  '2019':{'product1': 267, 'product2': 28}}

所以我写了一个函数:

def all_timeline(x):
dic = {str(i):x[i] for i in range(2020,2018,-1)}
return dic

然后在分组后使用它:

after_gb=df.groupby(by="name").apply(all_timeline).reset_index()
after_gb.rename(columns={0:"chronology"}, inplace=True)
name    chronology
0   Spot1   {'2020': [{'product1': 20.3, 'product2': 0.93}...
1   Spot2   {'2020': [{'product1': 67, 'product2': 678}], .

我有一个带列表的dict,而不是dict中的dict。。。我在to_json导出后看到了这个错误,它显示:

{
"name":{"0":"Spot1",
"1":"Spot2"},
"chronology":{
"0":{
"2020":{"1":{"product1":20.3,"product2":0.93}},
"2019":{"1":{"product1":28,"product2":1003}}},
"1":{
"2020":{"1":{"product1":67,"product2":678}},
"2019":{"1":{"product1":267,"product2":28}}}}
}

我错过了什么?

单向:

df = df.set_index('name')
df = df.apply(lambda x: {f'{col}':x[col] for col in df.columns}, 1).reset_index(name = 'chronology')

最新更新