【问题标题】:Data Frame to nested dictionary: Python数据框到嵌套字典:Python
【发布时间】:2022-12-05 18:50:50
【问题描述】:

我正在使用数据框:

   day        account_id     balance
  2022-11-01  ncw8y7     1.000000
  2022-11-02  ncw8y7     1.000424

我想将其转换为嵌套字典,其中第一级是 account_id,第二级是类别名称“余额”,第三级是最终包含日期作为列表和余额的日期:

{"account_id":"ncw8y7","balances":{"2022-11-01":{"day":[2022,11,01],"balance":1.00000},"2022-11-02":{"day":[2022,11,2],"balance":1.000424}}}

我尝试采用this 和post 中的解决方案。但是,出于某种原因,在使用第一个解决方案尝试学习如何进行此转换的第一部分时(不包含日期的部分):

dict = results.groupby('account_id')[['day','balance']].apply(lambda x: x.set_index('day').to_dict(orient='index')).to_dict()

我正进入(状态

{'ncw8y7': {datetime.date(2022, 11, 1): {'balance': 1.00000},
  datetime.date(2022, 11, 2): {'balance': 1.000424}}}

我不明白为什么 'day' 变量以这种方式格式化:datetime.date(2022, 11, 1)。那是因为把它作为索引吗?你会建议我如何采用dict功能来达到预期的效果?

【问题讨论】:

  • 请提供一种正确的方法来重新创建您的初始数据框,例如df.to_dict()
  • data = {'day': ['2022-11-01', '2022-11-02'], 'account_id': ['ncw8y7', 'ncw8y7'], 'balance': [1.000000, 1.000424] } df = pd.DataFrame(数据)
  • 请编辑您的问题。还有多个帐户 ID,您最终会得到一个字典列表。这是你想要的吗?

标签: python dataframe dictionary


【解决方案1】:

这应该工作:

dfx=df.groupby('account_id').agg(list)
final=[]
for i in dfx.index:
    final.append({"account_id":i,"balances":{dfx['day'][i][j]:{"day":[dfx['day'][i][j]],"balance":dfx['balance'][i][j]} for j in range(len(dfx['day'][i]))}})

输出:

[
{
    "account_id":"ncw8y7",
    "balances":{
        "2022-11-01":{
            "day":[
                "2022-11-01"
            ],
            "balance":1.0
        },
        "2022-11-02":{
            "day":[
                "2022-11-02"
            ],
            "balance":1.000424
        }
    }
}

]

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 2021-11-05
    • 2021-06-11
    • 2023-03-23
    • 2018-04-14
    • 2020-06-04
    • 2021-09-25
    相关资源
    最近更新 更多