python中列名的循环
我想将平均值从一个数据帧(df1)写入另一个数据帧(dfmaster)。 我可以手动管理它,但我希望以这种方式自动化这个过程,它将从df1中读取所有列名称(作为变量),这些变量将用于下面的代码中,以计算数据帧(df1)中所有列的平均值 根据此数据框,应计算列的平均值:python中列名的循环,python,pandas,dataframe,loops,automation,Python,Pandas,Dataframe,Loops,Automation,我想将平均值从一个数据帧(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 = ['Proze
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),以便在循环中使用它们。
我不确定这是否是正确的方法。虽然您可以使用
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
堆叠数据帧
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
您可以使用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。描述()/Cord>的输出:
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
df1.columns.to_list()
将帮助您获取要迭代/存储的列名。同时检查df1.mean()
。谢谢回复。我也处理好了,但我不知道下一步该怎么办。如何将列表定义为变量,我可以将其用于循环。+1从我推荐的.descripe()
,可能还值得一提的是,输出cna被保存为数据帧,并直接操纵到OPs预期结果良好点。如果我记得的话,等我有时间再补充。Cameron的回答显示了使用update
的过程。