Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用groupby对Pandas数据帧进行计算,然后将其传递回数据帧?_Python_Pandas_Dataframe_Grouping - Fatal编程技术网

Python 使用groupby对Pandas数据帧进行计算,然后将其传递回数据帧?

Python 使用groupby对Pandas数据帧进行计算,然后将其传递回数据帧?,python,pandas,dataframe,grouping,Python,Pandas,Dataframe,Grouping,我有一个数据框,我想用两个变量分组,然后在这些变量内执行计算。有没有简单的方法可以做到这一点,并在我完成后将信息放回数据帧中,例如: df=pd.DataFrame({'A':[1,1,1,2,2,2,30,12,122,345], 'B':[1,1,1,2,3,3,3,2,3,4], 'C':[101,230,12,122,345,23,943,83,923,10]}) total = [] avg = [] AID = [] BID = [] for name, group in df.g

我有一个数据框,我想用两个变量分组,然后在这些变量内执行计算。有没有简单的方法可以做到这一点,并在我完成后将信息放回数据帧中,例如:

df=pd.DataFrame({'A':[1,1,1,2,2,2,30,12,122,345],
'B':[1,1,1,2,3,3,3,2,3,4],
'C':[101,230,12,122,345,23,943,83,923,10]})

total = []
avg = []
AID = []
BID = []
for name, group in df.groupby(['A', 'B']):
    total.append(group.C.sum())
    avg.append(group.C.sum()/group.C.nunique())
    AID.append(name[0])
    BID.append(name[1])

x = pd.DataFrame({'total':total,'avg':avg,'AID':AID,'BID':BID})

但显然效率更高?

您可以在
groupby
之后使用
pandas
聚合函数:

import pandas as pd
import numpy as np
df.groupby(['A', 'B'])['C'].agg({'total': np.sum, 'avg': np.mean}).reset_index()

#      A    B   total          avg
# 0    1    1     343   114.333333
# 1    2    2     122   122.000000
# 2    2    3     368   184.000000
# 3   12    2      83    83.000000
# 4   30    3     943   943.000000
# 5  122    3     923   923.000000
# 6  345    4      10    10.000000

我觉得这就是答案,但我还有一个问题——假设‘avg’实际上是sum()除以另一列中的唯一元素——我如何引用另一列。np.sum/np.unique(组['other_column'])?这有意义吗?我可能分两步来做
df1=df.groupby(['A','B'])['C'].agg({'total':np.sum});df1['avg']=df1.total/df.groupby(['A','B'])['other'].agg({'num':pd.Series.nunique}).num;df1.reset_index()
类似的内容;