簡體   English   中英

在python中循環列名

[英]Loop for column names in python

我想將平均值從一個數據幀(df1)寫入另一個(dfmaster)。 手動我可以管理它,但我想以這種方式自動化該過程,它將從 df1(作為變量)讀取所有列名稱,並且這些變量將在下面的代碼中使用,以計算所有的平均值數據框 (df1) 中的列。

從這個數據框中應該是計算出的列的平均值:

import pandas as pd 
data = [[6.2, 10, 8], [6.4, 15, 13], [6.6, 14, 6]] 
df1 = pd.DataFrame(data, columns = ['Prozess233', 'Prozess234', 'Prozess235']) 
df1 

在此處輸入圖片說明

這是應存儲均值的主數據框:

data = [['Prozess233','NaN', 'NaN','NaN'], ['Prozess234','NaN', 'NaN', 'NaN'], ['Prozess235','NaN', 'NaN', 'NaN']] 
dfmaster = pd.DataFrame(data, columns = ['Process', 'Mean', 'St.Dev', 'Max']) 
dfmaster 

在此處輸入圖片說明

這是從 df1 的一列計算平均值並將值存儲在主數據框中的代碼:

index = dfmaster.loc[dfmaster['Process'] == 'Prozess233'].index[0]
keep_col = ['Prozess233']
df1 = df1[keep_col]
df1 = df1[df1['Prozess233'].notna()]
meanPR = df1["Prozess233"].mean()
dfmaster.at[index, 'Mean'] = meanPR

這是結果:

在此處輸入圖片說明

我想要一個循環,上面的代碼(將平均值存儲到主數據幀中)將對數據幀 df1 的所有列執行 - “Prozess234”和“Prozess235”的平均值。

我不知道如何存儲列名 (df1),以便在循環中使用它們。 我不確定,這是否是正確的方法。

您可以使用 agg 獲取每列的特定聚合:

df1_summary = (df1.agg(["mean", "std", "max"])
               .rename(index={"mean": "Mean", "std": "St.Dev", "max": "Max"}))

print(df1_summary)
        Prozess233  Prozess234  Prozess235
Mean           6.4   13.000000    9.000000
St.Dev         0.2    2.645751    3.605551
Max            6.6   15.000000   13.000000

那么如果你想把它填入你的dfmaster

dfmaster = dfmaster.set_index("Process") 
dfmaster.update(df1_summary.T)

print(dfmaster)
            Mean    St.Dev   Max
Process                         
Prozess233   6.4  0.200000   6.6
Prozess234  13.0  2.645751  15.0
Prozess235   9.0  3.605551  13.0

而不是一一添加到 dfmaster 只需使用矢量化方法創建它:

import pandas as pd 
data = [[6.2, 10, 8], [6.4, 15, 13], [6.6, 14, 6]] 
df1 = pd.DataFrame(data, columns = ['Prozess233', 'Prozess234', 'Prozess235']) 
dfmaster=pd.concat([df1.mean(), df1.std(), df1.max()], axis=1).reset_index()
dfmaster.columns = ['Process','Mean', 'St.Dev', 'Max']

#dfmaster
      Process  Mean    St.Dev   Max
0  Prozess233   6.4  0.200000   6.6
1  Prozess234  13.0  2.645751  15.0
2  Prozess235   9.0  3.605551  13.0

此外,根據您的需要,請考慮查看df1.describe()的輸出:

       Prozess233  Prozess234  Prozess235
count         3.0    3.000000    3.000000
mean          6.4   13.000000    9.000000
std           0.2    2.645751    3.605551
min           6.2   10.000000    6.000000
25%           6.3   12.000000    7.000000
50%           6.4   14.000000    8.000000
75%           6.5   14.500000   10.500000
max           6.6   15.000000   13.000000

雖然您可以使用df.columns獲取數據幀的列,但幾乎沒有充分的理由迭代df.columns數據幀以進行簡單的數學計算。

你所追求的可以完成

df1.T.stack().groupby(level=0).agg({np.mean,np.std, max})

            mean    std         max
Prozess233  6.4     0.200000    6.6
Prozess234  13.0    2.645751    15.0
Prozess235  9.0     3.605551    13.0

進一步分解:

轉置數據框

dft=df1.T
dft

            0       1       2
Prozess233  6.2     6.4     6.6
Prozess234  10.0    15.0    14.0
Prozess235  8.0     13.0    6.0

堆疊數據幀

dfs=dft.stack()
dfs

Prozess233  0     6.2
            1     6.4
            2     6.6
Prozess234  0    10.0
            1    15.0
            2    14.0
Prozess235  0     8.0
            1    13.0
            2     6.0
dtype: float64

分組和聚合

dfmaster=dfs.groupby(level=0).agg({np.mean,np.std, max})
dfmaster

            mean    std         max
Prozess233  6.4     0.200000    6.6
Prozess234  13.0    2.645751    15.0
Prozess235  9.0     3.605551    13.0

暫無
暫無

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

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