使用python使用循环为多个文件创建新的均值

问题描述 投票:1回答:1

我有这个看起来像这样的数据框

df = pd.DataFrame({'A':[230,345,222],'':[235,375,292],'B':[210,385,260],' ':[235,378,292],'C':[255,379,333],'D':[555,321,121],'E':[999,123,333],'  ':[1231,1231,222]})
     A               B               C       D       E  
0   230     235     210     235     255     555     999     1231
1   345     375     385     378     379     321     123     1231
2   222     292     260     292     333     121     333     222  

我想为每个参数添加均值列,因为像A,B和E这样的参数有2个具有值的列。到目前为止,我只可以创建一个参数列,而当我想为另一个列创建参数时迷路了。代码如下

dflist=pd.DataFrame()
for i, file in enumerate(flist):
    df = pd.read_csv(file, skiprows = [0,1,3,4])
    data = df.iloc[:,1:2]
    dflist['A%i'%i] = data.mean(axis=1)   

我希望结果像这样。

     A              Aavg     B              Bavg     C       D        E            Eavg
0   230     235     123     210     235     123     255     555     999     1231    111
1   345     375     456     385     378     324     379     321     123     1231    222
2   222     292     333     260     292     1231    333     121     333     222     333

任何帮助将不胜感激

python pandas loops dataframe
1个回答
0
投票

您没有正确索引列。正确的索引应如下所示:

df = pd.DataFrame({
    ('A', 1):[230,345,222],
    ('A', 2):[235,375,292],
    ('B', 1):[210,385,260],
    ('B', 2):[235,378,292],
    ('C', 1):[255,379,333],
    ('D', 1):[555,321,121],
    ('E', 1):[999,123,333],
    ('E', 2):[1231,1231,222]
})

    A         B         C    D    E      
    1    2    1    2    1    1    1     2
0  230  235  210  235  255  555  999  1231
1  345  375  385  378  379  321  123  1231
2  222  292  260  292  333  121  333   222

然后您可以很容易地按列进行平均:

df.mean(level=0, axis=1)

       A      B      C      D       E
0  232.5  222.5  255.0  555.0  1115.0
1  360.0  381.5  379.0  321.0   677.0
2  257.0  276.0  333.0  121.0   277.5

如果您无法控制数据格式,则可以将每个以空白命名的列视为上一列的延续:

col_group = df.columns.to_series() \
                .str.strip() \
                .replace('')

df.groupby(col_group, axis=1).mean()

replace函数看似简单,但实际上它同时在做两件事:(1)用None替换空白列名; (2)用最后一个非空列名填充这些None(通过method='pad'默认参数)。

© www.soinside.com 2019 - 2024. All rights reserved.