【发布时间】:2021-10-26 09:22:55
【问题描述】:
我正在尝试将这样的 df 转换为具有多个嵌套键的字典。
import pandas as pd
import datetime
columns = ['country', 'city', 'from_date', 'to_date', 'sales']
data = [['UK', 'London', datetime.date(2021, 8, 26), datetime.date(2099, 5,5), 2500], ['Mexico', 'Mexico City', datetime.date(2011, 3,3), datetime.date(2012, 4, 5), 5670], ['Mexico', 'Mexico City', datetime.date(2014, 3,3), datetime.date(2017, 4, 5), 5680]]
df = pd.DataFrame(data, columns=columns)
df
country city from_date to_date sales
0 UK London 2021-08-26 2099-05-05 2500
1 Mexico Mexico City 2011-03-03 2012-04-05 5670
2 Mexico Mexico City 2014-03-03 2017-04-05 5680
我正在寻找的结果 #1:
{'Mexico':
{'Mexico City':
[
{'from_date: 2011-03-03, 'to_date: 2012-04-05, 'sales': 5670},
{'from_date: 2014-03-03, 'to_date: 2017-04-05, 'sales': 5680}
]},
'UK':
{'London':
[
{'from_date: 2021-08-26, 'to_date: 2099-05-05, 'sales': 2500}
]},
}
或结果 #2:
{'Mexico':
{'Mexico City':
{2011-03-03: 5670, # from_date: sales
2014-03-03: 5680} # from_date: sales
},
'UK':
{'London':
{2021-08-26: 2500} # from_date: sales
},
}
我不知道如何得到结果#1,至于结果#2我试过这个:
df.groupby(['country', 'city', 'from_date'])['sales'].apply(float).to_dict()
{('Mexico', 'Mexico City', Timestamp('2011-03-03 00:00:00')): 5670.0, ('Mexico', 'Mexico City', Timestamp('2014-03-03 00:00:00')): 5670.0, ('UK', 'London', Timestamp('2021-08-26 00:00:00')): 2500.0}
但我需要能够将from_date 作为单独的密钥,因为我将使用它与另一个日期进行比较。
理想情况下,我想学习如何获得这两个结果,但我们不胜感激!
【问题讨论】:
-
您的示例代码缺少
import datetime并且不确定import dataframe是什么? -
“结果#2”的结构在第一步中似乎是不可能的。如果您想拥有多个没有键的字典,则必须将它们放在一个数组中:
[{2011-03-03: 5670}, {2014-03-03: 5680}];{2011-03-03: 5670}格式的最里面的字典似乎是对字典的滥用。不过,“结果 #1”似乎可行。 -
@JonClements 这是一个简单的错字 - 已修复为导入日期时间 :)
-
@Haroldo_OK 你是对的 - 我把它们当作 dict。
标签: python pandas dataframe dictionary