我想知道如何将所有以相同名称开头的列合并为一个,作为它们的总和。
例如:
Over_100 Over_200 Over_300_et
1 10 50 60
会给
Overs_mean
1 40
要么:
Overs_sum
1 120
谢谢 !
从你的例子
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句