Python 如何按列名的一部分分组,并聚合平均值?
我可以取两列的平均值,并将其作为一个新列返回,但我不知道如何对原始数据所具有的特定约定中的所有列执行此操作。目标是平均A1和D1、…、A12和D12等 我尝试了以下内容的不同迭代,但如果我不指定精确的列,它将不起作用Python 如何按列名的一部分分组,并聚合平均值?,python,pandas,mean,calculated-columns,Python,Pandas,Mean,Calculated Columns,我可以取两列的平均值,并将其作为一个新列返回,但我不知道如何对原始数据所具有的特定约定中的所有列执行此操作。目标是平均A1和D1、…、A12和D12等 我尝试了以下内容的不同迭代,但如果我不指定精确的列,它将不起作用 import pandas as pd df = pd.DataFrame({'Time': [0.1, 0.2, 0.3], 'A1': [1000, 2000, 3000], 'A12': [1000
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')和column.startswith('D')
- 注释中的解决方案很接近,但切片位置不正确,它是所有列的平均值,而不仅仅是
和A
D
[1://code>在第一个字符后开始切片(例如
A1://code>是
)1
- 在本例中,创建with以仅查找感兴趣的列,
和a
。D
- 使用了
,因为它可以识别正则表达式模式,而不能识别.contains
- 使用了
- 仅对所需列执行以下操作:
df[cols].groupby(df[cols].columns.str[1:],axis=1)
#选择带有A或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).添加前缀('AD\u-mean_'))
时间A1 A12 B1 B12 D1 D12平均值1平均值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