Python 使用np计算聚合列。其中返回列表对象
我想用if-else条件对聚合数据帧进行一些计算。我尝试使用np.where,但结果是result列中的list对象。我在这里做错了什么: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],
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