如何将熊猫数据帧(系列)转换为字典

时间:2021-05-31 14:33:27

标签: python pandas dataframe series

请帮助操作数据框熊猫。

我有一个这样的查询和一个日期框:

    sql_query = pd.read_sql_query(query, connection)
    df = pd.DataFrame(sql_query, columns=['id', 'w_id', 'w_date_from', 'w_date_to', 'br_id'])
    df['w_date_from'] = pd.to_datetime(df['w_date_from'].dt.tz_convert('Europe/Moscow'))
    df['w_date_from'] = df['w_date_from'].dt.strftime('%H:%M')
    df['w_date_to'] = df['w_date_to'].dt.day_name()

    df = df.groupby(
        ['w_date_to', 'w_date_from']
    )['br_id', 'w_id'].agg(['nunique']).rename_axis(['weekday', 'time'])
    df['percent'] = df['br_id'] / df['w_id']
    del df['br_id']
    del df['w_id']
    print(df)

这段代码的结果是这样的:

                   percent
                          
weekday   time            
Friday    07:40   9.666667
          09:30   7.000000
          10:30   9.750000
...                    ...
Wednesday 15:10   6.833333
          16:30  14.166667
          18:30  26.166667

[81 rows x 1 columns]

我需要得到这样的结果:

"weekday_time": {
        "Friday": {
            "07:40": 7.67,
            "09:30": 8.0,
            "10:30": 5.0
        },
        
        ...

        "Wednesday": {
            "10:30": 14.0,
            "11:50": 8.43,
            "13:00": 12.5
        }
    },

1 个答案:

答案 0 :(得分:0)

您可以使用 pandas 的内置 to_dict() 方法。

要将您的多级索引转换成您想要的格式,如果有两个级别,您可以先使用 unstack() 将系列转换为数据框。

您希望第一个级别是天数,第二个级别是小时数,因此您必须拆开第 0 个级别而不是第 -1 个级别。

以下应该可以解决问题:

df["percent"].unstack(level=0).to_dict()