Python 如何通过对某些列求平均值,从现有的dataframe生成新的dataframe
我有一个有列的数据框-Python 如何通过对某些列求平均值,从现有的dataframe生成新的dataframe,python,pandas,Python,Pandas,我有一个有列的数据框- cols = group_dataframe.columns print(cols) Index(['TEST_TXT', 'count', 'mean', 'std', 'LSL', 'USL', 'median', 'Cp', 'CpK', 'Cpu', 'Cpl', 'min', 'max', '25%', '50%', '75%'], dtype='object') 我希望创建一个新的数据帧,其中包含某些列的所有行的平均值,如“mea
cols = group_dataframe.columns
print(cols)
Index(['TEST_TXT', 'count', 'mean', 'std', 'LSL', 'USL', 'median', 'Cp', 'CpK', 'Cpu', 'Cpl', 'min', 'max', '25%',
'50%', '75%'],
dtype='object')
我希望创建一个新的数据帧,其中包含某些列的所有行的平均值,如“mean”、“std”、“Cp”、“Cpu”
,但“min”
和“max”
列的最小值和最大值,同时将test_txt
从处理中删除
我的代码如下所示-
new_df = pd.DataFrame()
new_df["Group"] = np.asarray(test_group_name)
for col in cols:
if col == "TEST_TXT":
pass
elif col in ["min","max"]:
new_df[col] = np.min(group_dataframe[col].astype(float))
else:
new_df[col] = np.mean(group_dataframe[col].astype(float))
但这似乎根本无法填充数据帧。新的数据帧应该只有一行,即某一列的平均值和其他列的最小/最大值。有人能帮我找到错误(如果有),或者建议更好的方法来达到同样的效果吗?我会先用平均值创建一个字典,然后将它转换成数据帧
res = {}
for col in cols:
if col == "TEST_TXT":
pass
elif col in ["min","max"]:
res[col] = np.min(group_dataframe[col].astype(float))
else:
res[col] = np.mean(group_dataframe[col].astype(float))
new_df = pd.DataFrame(res)
aggregate
似乎能满足您的需求:
df = pd.DataFrame(np.random.random((5,4)), columns=['count', 'dummy', 'mean', 'max'])
df.agg({'count': 'mean', 'mean':'mean', 'max':'max'})
在这里,我创建了一个包含4列的Dataframe
,并使用特定函数聚合感兴趣的列。结果是一个系列
count 0.493802
mean 0.532349
max 0.676727
无需在列上循环,
pandas
为此提供了功能。您可以查看agg
或apply
。如果你提供帮助,我们可以提供更好的帮助。这似乎已经解决了问题。但我不明白是哪种方式起作用,而不是我当时的方式。你有什么线索吗?可能。我不知道您的声明中的test\u group\u name
是什么new\u df[“group”]=np.asarray(test\u group\u name)
,因此值得检查。但我认为,修复原始代码的主要方法是使rhs成为列表/数组而不是浮动的,如new_df[col]=[np.min(group_da…])
PS如果test_group_name
是标量,那么您还需要类似这样的new_df[“group”]=np.asarray([test_group_da…])
或简单的`new_df[“group”]=[test_group_name]“test_group_name”只是一个变量,更准确地说是字符串变量。谢谢。实际上我想要的是一个数据帧。但它也解决了这个问题。+1您可以通过@igrinis从解决方案中创建一个数据帧,例如df=pd.dataframe(np.random.random((5,4)),columns=['count',dummy',mean',max'])res df agg({'count':'mean','mean':'mean','max':'max'})df_res=pd.DataFrame(res).transpose()
@piterberg好极了。感谢您提供的快速信息。