我想知道如何将所有以相同名称开头的列合并为一个,将它们全部或全部合并。
例如:
Over_100 Over_200 Over_300_et
1 10 50 60
会给出
Overs_mean
1 40
或者:
Overs_sum
1 120
谢谢!
答案 0 :(得分:3)
来自你的例子
df.filter(like='Over').mean(1)
1 40.0
dtype: float64
制作数据框
df.filter(like='Over').mean(1).to_frame('Overs_mean')
Overs_mean
1 40.0
要获得更完整的解决方案,请使用groupby
考虑下面构建的数据框df
:
np.random.seed([3,1415])
d1 = pd.DataFrame(np.random.randint(10, size=(5, 3))).add_prefix('A_')
d2 = pd.DataFrame(np.random.randint(10, size=(5, 3))).add_prefix('B_')
d3 = pd.DataFrame(np.random.randint(10, size=(5, 3))).add_prefix('C_')
df = pd.concat([d1, d2, d3], axis=1)
print(df)
我们将按照以相同内容开头的列分组到第一个下划线。
means = df.groupby(
df.columns.str.split('_').str[0], axis=1
).mean().add_suffix('_mean')
print(means)
A_mean B_mean C_mean
0 3.000000 4.000000 7.000000
1 6.000000 3.333333 5.666667
2 4.666667 6.666667 4.666667
3 2.666667 4.000000 5.000000
4 4.333333 7.000000 6.666667
仅采用以A
开头的列并将其与其余列合并:
a_cols = df.columns.str.startswith('A')
df.loc[:, ~a_cols].join(df.loc[:, a_cols].mean(1).rename('A_mean'))
B_0 B_1 B_2 C_0 C_1 C_2 A_mean
0 7 3 2 8 7 6 3.000000
1 4 3 3 4 7 6 6.000000
2 6 7 7 2 6 6 4.666667
3 4 5 3 5 2 8 2.666667
4 7 5 9 7 5 8 4.333333