python - 我们可以更改 pandas 交叉表吗?
问题描述
我已经使用 sqlalchemy 和 pymysql 从 MySQL 加载 raw_data
engine = create_engine('mysql+pymysql://[user]:[passwd]@[host]:[port]/[database]')
df = pd.read_sql_table('data', engine)
df 是这样的
| Age Category | Category |
|--------------|----------------|
| 31-26 | Engaged |
| 26-31 | Engaged |
| 31-36 | Not Engaged |
| Above 51 | Engaged |
| 41-46 | Disengaged |
| 46-51 | Nearly Engaged |
| 26-31 | Disengaged |
然后我进行了如下分析
age = pd.crosstab(df['Age Category'], df['Category'])
| Category | A | B | C | D |
|--------------|---|----|----|---|
| Age Category | | | | |
| 21-26 | 2 | 2 | 4 | 1 |
| 26-31 | 7 | 11 | 12 | 5 |
| 31-36 | 3 | 5 | 5 | 2 |
| 36-41 | 2 | 4 | 1 | 7 |
| 41-46 | 0 | 1 | 3 | 2 |
| 46-51 | 0 | 0 | 2 | 3 |
| Above 51 | 0 | 3 | 0 | 6 |
我想把它改成这样的 Pandas DataFrame。
| Age Category | A | B | C | D |
|--------------|---|----|----|---|
| 21-26 | 2 | 2 | 4 | 1 |
| 26-31 | 7 | 11 | 12 | 5 |
| 31-36 | 3 | 5 | 5 | 2 |
| 36-41 | 2 | 4 | 1 | 7 |
| 41-46 | 0 | 1 | 3 | 2 |
| 46-51 | 0 | 0 | 2 | 3 |
| Above 51 | 0 | 3 | 0 | 6 |
感谢您的时间和考虑
解决方案
这两个文本都称为列和索引名称,更改它们的解决方案是使用DataFrame.rename_axis
:
age = age.rename_axis(index=None, columns='Age Category')
或者通过索引名称设置列名称,然后将索引名称设置为默认 - None
:
age.columns.name = age.index.name
age.index.name = None
print (age)
Age Category Disengaged Engaged Nearly Engaged Not Engaged
26-31 1 1 0 0
31-26 0 1 0 0
31-36 0 0 0 1
41-46 1 0 0 0
46-51 0 0 1 0
Above 51 0 1 0 0
但是这些文本类似于元数据,因此某些功能应该删除它们。
推荐阅读
- terraform - terraform 隐藏显示的值
- git - Git 推送到 Github 后会删除本地文件吗?
- java - Java日期返回1970?
- python - 按字符串属性对对象列表进行排序
- node.js - Firebase 函数获取键名列表
- c# - 如何在 C# 中使用 ConfigurationManager 保存到漫游配置文件
- python - 如何防止 gdal.ReprojectImage 忽略零?
- c# - 试图弄清楚如何在我的代码中传递“字面值 20”
- javascript - 使用 React js Modal 的动态内容
- excel - excel表格中的x/y值列表