合并数据框中的多列

数据

我想知道如何将所有以相同名称开头的列合并为一个,作为它们的总和。

例如:

           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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章