python - 聚合数据框列
问题描述
我有一个看起来像这样的日期框架:
d = {'text':['A','B'],'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
df
text col1 col2
0 A 1 3
1 B 2 3
我想按列计算平均值并在标题“文本”上方添加标签“率”:
'mean:' meanofcol1 meanofcol2
text col1 col2
0 A 1 3
1 B 2 3
谢谢你的帮助
解决方案
仅选择数字列 by select_dtypes
, countmean
和merge
with another dictionary
:
d = {**df.select_dtypes(np.number).mean().to_dict(), **{'text': 'rate: '}}
print (d)
{'col1': 1.5, 'col2': 3.5, 'text': 'rate: '}
然后MultiIndex
用Index.map
with创建MultiIndex.from_arrays
:
df.columns = pd.MultiIndex.from_arrays([df.columns.map(d.get), df.columns])
#alternative
#df.columns = [df.columns.map(d.get), df.columns]
print (df)
rate: 1.5 3.5
text col1 col2
0 A 1 3
1 B 2 4
如果所有没有 first 的数字列都是可能的,则此替代方法 - 将 text 列转换为索引,创建MultiIndex
和 last rename_axis
:
df = df.set_index('text')
d = df.select_dtypes(np.number).mean()
print (d)
col1 1.5
col2 3.5
dtype: float64
df.columns = pd.MultiIndex.from_arrays([df.columns.map(d.get), df.columns])
#pandas 0.24.1+
df = df.rename_axis(columns=('rate: ','text'), index=None)
#pandas bellow
#df = df.rename_axis(('rate: ','text'), axis=1).rename_axis(None)
print (df)
rate: 1.5 3.5
text col1 col2
A 1 3
B 2 4
还text
应该动态分配:
df = df.rename_axis(columns=('rate: ', df.index.name), index=None)
#df = df.rename_axis(('rate: ', df.index.name), axis=1).rename_axis(None)
推荐阅读
- python - 有没有办法让程序在 Selenium Python 中遇到错误时继续运行
- amazon-web-services - AWS:Bitnami:UNYSON:无法创建临时目录
- docker - 如何在 Kubernetes 部署中引用从 tar 文件加载的本地 docker 镜像?
- node.js - GetStaticProps 上的许多请求会冻结我的应用程序构建并返回服务器错误
- javascript - 如何在 Node 中验证 React 组件
- c# - 为什么我不能通过 LostFocus 方法对我的 ComboBox 进行操作?
- python-3.x - Selenium 和 Python 中的 ElementClickInterceptedException 解决方案
- flutter - Haxm无法安装,系统要求不满足
- cockroachdb - 在 cockroachDB 中插入 JSON 数据类型时,是否可以在 JSON 数据中使用 cockroach gen_random_uuid() 函数
- xml - XSLT:将节点及其子节点嵌套/移动到新节点中