我有一个数据框
L1_1 L1_2 L3_1 L2_1 L2_2 L1_3 L2_3 L3_2 ....
3 5 1 5 7 2 3 2
4 2 4 1 4 1 4 2
我需要找到均值“ L1”,均值“ L2”和均值“ L3”
我尝试了
data["Mean"]=data.mean(axis=1)
这给了我所有“ L1,L2和L3”的总和
我也尝试过
data[['L1_1','L1_2','L1_3','Mean']].head()
但是我有L1_1到L1_20
所以循环听起来不错。但是,我无法循环工作。
for i in range(1,21):
c = "'L1_" + i + "'," + c
循环是前往此处的好方法吗?还是有更好的选择? 如果要循环,那么如何使循环在数据帧中工作?
答案 0 :(得分:2)
将(axis=1)
列中的groupby
与拆分值的自定义功能一起使用:
df1 = df.groupby(lambda x: x.split('_')[0], axis=1).mean()
#another solution
#df1 = df.groupby(df.columns.str.split('_').str[0], axis=1).mean()
print (df1)
L1 L2 L3
0 3.333333 5.0 1.5
1 2.333333 3.0 3.0
如果要在原始df
中添加nex列,如果还希望重命名列名称,则将join
与add_suffix
添加:
df = df.join(df1.add_suffix('_mean'))
print (df)
L1_1 L1_2 L3_1 L2_1 L2_2 L1_3 L2_3 L3_2 L1_mean L2_mean L3_mean
0 3 5 1 5 7 2 3 2 3.333333 5.0 1.5
1 4 2 4 1 4 1 4 2 2.333333 3.0 3.0