python - 如何对列名的一部分进行分组,并聚合意味着?
问题描述
我可以取两列的平均值,并将其作为新列返回,但我不知道如何对原始数据具有的特定约定中的所有列执行此操作。目标是平均 A1 和 D1,...,A12 和 D12 等。
我尝试了以下内容的不同迭代,但如果我不指定确切的列,它就不起作用......
import pandas as pd
df = pd.DataFrame({'Time': [0.1, 0.2, 0.3],
'A1': [1000, 2000, 3000],
'A12': [1000, 2000, 3000],
'B1': [4000, 5000, 6000],
'B12': [4000, 5000, 6000],
'D1': [40000, 50000, 42000],
'D12': [40000, 50000, 42000]})
for column in d.columns:
if column.startswith('A') and column.startswith('D'):
d= (d[['A1', 'D1']].iloc[:].mean(axis=1))
解决方案
- 如评论中所述,
column.startswith('A') and column.startswith('D')
永远不会是真的。 - 评论中的解决方案很接近,但切片的位置不正确,它是所有列的平均值,而不仅仅是
A
andD
。 [1:]
在第一个字符之后开始切片(例如A1[1:]
is1
)- 真正的 Python:字符串索引
- 创建一个布尔掩码以
pandas.Series.str.contains
仅查找感兴趣的列A
,D
在本例中为 。.contains
使用,因为它识别正则表达式模式,而.startswith
不是。
.groupby
仅在所需列上 执行df[cols].groupby(df[cols].columns.str[1:], axis=1)
# select columns with A or D
cols = df.columns[df.columns.str.contains('A|D')]
dfm = df.join(df[cols].groupby(df[cols].columns.str[1:], axis=1).mean().astype(float).add_prefix('AD_mean_'))
Time A1 A12 B1 B12 D1 D12 AD_mean_1 AD_mean_12
0 0.1 1000 1000 4000 4000 40000 40000 20500.0 20500.0
1 0.2 2000 2000 5000 5000 50000 50000 26000.0 26000.0
2 0.3 3000 3000 6000 6000 42000 42000 22500.0 22500.0
推荐阅读
- javascript - 访问和循环访问 JSON 文件
- java - 使用辅助功能 ID 和 xpath 错误单击菜单
- python - 使用来自liswidget的itemdelegate和信号时如何保护tablewidget中更改的单元格?
- c++ - 使用 DirectX 11 插入背景颜色?
- r - 如何为每个 x 值制作两个条形图?
- sql - 将自定义语句转换为激活的代码
- c# - POST 到 OData v4 Web API 操作时子集合为空
- r - 使用 R 中的因子 self 的子集重命名因子水平
- android - 试图在 Android Room 中捕获 SQLiteConstraintException 并显示警报
- javascript - 向下传递模块 - javascript