python - 将带有二进制列的 pandas 数据帧转换为更紧凑的表示
问题描述
我有以下熊猫数据框:
import pandas as pd
import numpy as np
np.random.seed(0)
daytime = pd.date_range('2015-02-24', periods=6, freq='d')
df = pd.DataFrame({'DATE': ['2015-02-24', '2015-02-24', '2015-02-25', '2015-02-25', '2015-02-26', '2015-02-26'],
'HappyCustomer': ['True', 'False','True', 'False','True', 'False'],
'HappyCustomerCount': [2, 4,1, 6, 2, 3] })
df.set_index('DATE', inplace=True)
df.head(6)
HappyCustomer HappyCustomerCount
DATE
2015-02-24 True 2
2015-02-24 False 4
2015-02-25 True 1
2015-02-25 False 6
2015-02-26 True 2
2015-02-26 False 3
我认为该列HappyCustomer
是多余的,因为它始终是'True'
and 'False'
。我想将列转换为某事。像这样:
解决方案:
HappyCustomerCount_True HappyCustomerCount_False
DATE
2015-02-24 2 4
2015-02-25 1 6
2015-02-26 2 3
可选的:
在最好的情况下,我可以使用(与 SQL 相关的)函数进行此转换,groupby
因为稍后我必须在 SQL 数据库中执行相同的工作。
我怎样才能做到这一点?
解决方案
使用DataFrame.set_index
withDataFrame.unstack
来重塑数据框,最后使用map
withjoin
来展平列MultiIndex
:
df1 = df.set_index('HappyCustomer', append=True).unstack()
df1.columns = df1.columns.map('_'.join)
结果:
# print(df1)
HappyCustomerCount_False HappyCustomerCount_True
DATE
2015-02-24 4 2
2015-02-25 6 1
2015-02-26 3 2
推荐阅读
- three.js - 如何通过鼠标选择矩形选择对象?
- javascript - 如果选项卡自动重新加载,浏览器扩展“browser.tabs.onUpdated.addListener”适用于 Chrome,但不适用于 Firefox
- css - Css Grid 媒体查询元素被推到外面
- c++ - 如何编写递归多数元素算法
- google-app-engine - 为 Google APP Engine 更新 composer.json
- java - 我没有在 OnTouchListners 中获得按钮释放 Toast
- python - 我尝试使用 python 进行网页抓取,但输出为空。我做错什么了吗?
- symfony - Symfony 进程组件 mysqldump gzip
- r - 使用 R 中的 lapply 或 sapply 优化循环以组合列表中的项目
- sql - 我想将 Postgres 表导出为 CSV 文件作为 Flask 上的下载按钮。怎么做?