猿问

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 

https://img.mukewang.com/651e793f00011c6102550116.jpg

以下是计算 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

这是结果:

https://img1.mukewang.com/651e794e0001b61d02590115.jpg

我想要一个循环,上面的代码(将平均值存储到主数据帧中)将对数据帧 df1 的所有列执行 - “Prozess234”和“Prozess235”的平均值。

我不知道如何存储列名(df1),以便在循环中使用它们。我不确定这是否是正确的方法。


慕尼黑5688855
浏览 102回答 3
3回答

慕娘9325324

您可以使用 agg 获取每列的特定聚合:df1_summary = (df1.agg(["mean", "std", "max"])               .rename(index={"mean": "Mean", "std": "St.Dev", "max": "Max"}))print(df1_summary)        Prozess233  Prozess234  Prozess235Mean           6.4   13.000000    9.000000St.Dev         0.2    2.645751    3.605551Max            6.6   15.000000   13.000000然后如果你想将其填充到你的dfmasterdfmaster = dfmaster.set_index("Process") dfmaster.update(df1_summary.T)print(dfmaster)            Mean    St.Dev   MaxProcess                         Prozess233   6.4  0.200000   6.6Prozess234  13.0  2.645751  15.0Prozess235   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   Max0  Prozess233   6.4  0.200000   6.61  Prozess234  13.0  2.645751  15.02  Prozess235   9.0  3.605551  13.0另外,根据您的需要考虑检查 的df1.describe()输出:       Prozess233  Prozess234  Prozess235count         3.0    3.000000    3.000000mean          6.4   13.000000    9.000000std           0.2    2.645751    3.605551min           6.2   10.000000    6.00000025%           6.3   12.000000    7.00000050%           6.4   14.000000    8.00000075%           6.5   14.500000   10.500000max           6.6   15.000000   13.000000

慕容708150

虽然您可以使用 获取数据框的列df.columns,但几乎没有充分的理由迭代 pandas 数据框以进行简单的数学计算。你所追求的可以用df1.T.stack().groupby(level=0).agg({np.mean,np.std, max})            mean    std         maxProzess233  6.4     0.200000    6.6Prozess234  13.0    2.645751    15.0Prozess235  9.0     3.605551    13.0进一步细分:转置数据框dft=df1.Tdft            0       1       2Prozess233  6.2     6.4     6.6Prozess234  10.0    15.0    14.0Prozess235  8.0     13.0    6.0堆叠数据框dfs=dft.stack()dfsProzess233  0     6.2            1     6.4            2     6.6Prozess234  0    10.0            1    15.0            2    14.0Prozess235  0     8.0            1    13.0            2     6.0dtype: float64组和聚合dfmaster=dfs.groupby(level=0).agg({np.mean,np.std, max})dfmaster            mean    std         maxProzess233  6.4     0.200000    6.6Prozess234  13.0    2.645751    15.0Prozess235  9.0     3.605551    13.0
随时随地看视频慕课网APP

相关分类

Python
我要回答