我可以取两列的平均值,然后将其作为新列返回,但是我无法弄清楚如何针对原始数据具有的特定约定对所有列执行此操作。目标是平均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))
答案 0 :(得分:2)
column.startswith('A') and column.startswith('D')
将永远是不正确的。A
和D
。[1:]
在第一个字符之后开始切片(例如A1[1:]
是1
)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