Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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 如何获得按列分组后的平均值?_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何获得按列分组后的平均值?

Python 如何获得按列分组后的平均值?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个名为df的数据框,我想得到不同性别组的不同应用程序的平均使用时间 import pandas as pd df=pd.DataFrame({'user':[2,3,4,4,5,5],'gender':[0,0,1,1,1,1], 'app':['k','k','k','k','s','s'],'time':[6,10,10,6,3,1]}) 输入: app gender time user 0 k 0 6 2 1 k 0 10

我有一个名为
df
的数据框,我想得到不同
性别
组的不同
应用程序的平均使用
时间

import pandas as pd 
df=pd.DataFrame({'user':[2,3,4,4,5,5],'gender':[0,0,1,1,1,1],
'app':['k','k','k','k','s','s'],'time':[6,10,10,6,3,1]})
输入:

  app  gender  time  user
0   k    0     6     2
1   k    0    10     3
2   k    1    10     4
3   k    1     6     4
4   s    1     3     5
5   s    1     1     5
对于
app k
gender 0
组使用
app k
的总时间为
16(10+6)
,因此
0_k
的平均使用时间为
8.0

gender 1
组使用
app k
的总时间为
16(10+6+0+0)
,因此
1k
的平均使用时间为
4.0

应为:

dict = {'0_k': 8.0, '0_s': 0, '1_k': 4.0, '1_s': 1.0}
要将其转换为字典,请执行以下操作:

dict = (df.groupby(["app", "gender"]).sum()/df.groupby(["gender"]).count()).time.to_dict()

{('k', 0): 8.0, ('s', 1): 2.0, ('k', 1): 8.0}
要将其转换为字典,请执行以下操作:

dict = (df.groupby(["app", "gender"]).sum()/df.groupby(["gender"]).count()).time.to_dict()

{('k', 0): 8.0, ('s', 1): 2.0, ('k', 1): 8.0}
我想你需要:

df['new_col'] = df.gender.astype(str)+'_'+df.app
df['Average'] = df.groupby(['gender','app'])['time'].transform('sum')/\
                df.groupby(['gender'])['time'].transform('count')

print(df)
   user  gender app  time new_col  Average
0     2       0   k     6     0_k      8.0
1     3       0   k    10     0_k      8.0
2     4       1   k    10     1_k      4.0
3     4       1   k     6     1_k      4.0
4     5       1   s     3     1_s      1.0
5     5       1   s     1     1_s      1.0

d = dict(df[['new_col','Average']].values)

print(d)
{'0_k': 8.0, '1_k': 4.0, '1_s': 1.0}
我想你需要:

df['new_col'] = df.gender.astype(str)+'_'+df.app
df['Average'] = df.groupby(['gender','app'])['time'].transform('sum')/\
                df.groupby(['gender'])['time'].transform('count')

print(df)
   user  gender app  time new_col  Average
0     2       0   k     6     0_k      8.0
1     3       0   k    10     0_k      8.0
2     4       1   k    10     1_k      4.0
3     4       1   k     6     1_k      4.0
4     5       1   s     3     1_s      1.0
5     5       1   s     1     1_s      1.0

d = dict(df[['new_col','Average']].values)

print(d)
{'0_k': 8.0, '1_k': 4.0, '1_s': 1.0}

对于
gender 1
组使用app
k
不是-
16(10+6)/2=8
?我只想让
gender
组使用不同的
app
。如您所见,
gender 1
组总共有四个人。@rosefun检查我的解决方案是否解决了问题。
gender 1
组使用app
k
不是-
16(10+6)/2=8
?我只想让
gender
组使用不同的
app
。如您所见,
gender 1
组总共有四个人。@rosefun检查我的解决方案是否解决了问题。