python - 如何将熊猫数据框(系列)转换为字典
问题描述
请帮助操作数据框熊猫。
我有一个这样的查询和熊猫一个日期框:
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
}
},
解决方案
您可以使用 pandas 的内置to_dict()
方法。
要将您的多级索引转换为您想要的格式,如果有两个级别,您可以先将系列转换为带有unstack()
.
您希望第一级是天,第二级是小时,因此您必须取消堆叠第 0 级而不是 -1 级。
以下应该可以解决问题:
df["percent"].unstack(level=0).to_dict()
推荐阅读
- intellij-idea - IntelliJ 中 ant 的导入问题
- java - java.lang.NoSuchMethodError: cucumber.runtime.Runtime
- react-native - 在注册时使用 withAuthenticator 放大获取用户属性
- typescript - 派生类中扩展构造函数参数的正确 TypeScript 类型
- python - Python 3 Turtle 模块 > .goto() 方法
- node.js - 在 Node.js gRPC 客户端中使用来自双向流回调的响应
- sql - 在 bigquery 中更改同一张表中的 2 列值
- html - 网站不滚动并根据纵横比截断文本
- excel - 如果另一个未隐藏,则隐藏工作表
- node.js - 如何使用 node / express.js 构建多个 post 端点