簡體   English   中英

使用 python 循環為多個文件創建新的平均列

[英]Creating new mean coloumns for multliple files using loop using python

我有這個看起來像這樣的數據框

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 個包含值的列。 到目前為止,我只能制作 1 個參數欄,並且當我想為另一個欄創建參數時迷路了。 代碼如下

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

任何幫助,將不勝感激

編輯:我的 csv 文件看起來像這樣在此處輸入圖片說明

您沒有正確索引您的列。 正確的索引應該是這樣的:

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 s(通過method='pad'默認參數)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM