Python 使用np计算聚合列。其中返回列表对象

Python 使用np计算聚合列。其中返回列表对象,python,pandas,dataframe,numpy,aggregate,Python,Pandas,Dataframe,Numpy,Aggregate,我想用if-else条件对聚合数据帧进行一些计算。我尝试使用np.where,但结果是result列中的list对象。我在这里做错了什么: import pandas as pd import numpy as np rng = np.random.RandomState(0) df = pd.DataFrame({'key': ['A', 'B', 'C', 'A', 'B', 'C'], 'days': [40,40,60,40,0,0],

我想用if-else条件对聚合数据帧进行一些计算。我尝试使用np.where,但结果是result列中的list对象。我在这里做错了什么:

import pandas as pd
import numpy as np

rng = np.random.RandomState(0)
df = pd.DataFrame({'key': ['A', 'B', 'C', 'A', 'B', 'C'],
               'days': [40,40,60,40,0,0],
               'data': rng.randint(0, 100, 6)},
               columns = ['key', 'days', 'data'])
def f(x):
    """comute aggregates and more"""
    d = {}
    d['data_mean'] = x['data'].mean()
    d['data_test'] = np.where(x['days']==0,x['data'].mean()*60,x['data'].mean()*x['days']) 
    return pd.Series(d, index=['data_mean', 'data_test'])

dfg = df.groupby(['key','days'])
dfg.apply(f)
结果如下所示:


我认为您可以生成并填充新列,而不是使用字典并从函数返回
x

def f(x):
    """comute aggregates and more"""
    x['data_mean'] = x['data'].mean()
    x['data_test'] = np.where(x['days']==0,x['data'].mean()*60,x['data'].mean()*x['days']) 
    return x

dfg = df.groupby(['key','days'])
print(dfg.apply(f))
  key  days  data  data_mean  data_test
0   A    40    44       55.5     2220.0
1   B    40    47       47.0     1880.0
2   C    60    64       64.0     3840.0
3   A    40    67       55.5     2220.0
4   B     0    67       67.0     4020.0
5   C     0     9        9.0      540.0