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好极了。感谢您提供的快速信息。