合并数据框中的多个列

时间:2017-05-19 20:15:18

标签: python pandas numpy

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

例如:

           Over_100         Over_200        Over_300_et
1             10                50               60

会给出

           Overs_mean 
1              40

或者:

           Overs_sum 
1              120

谢谢!

1 个答案:

答案 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