2017-04-11 51 views
0

我找不到任何方法从我的输入中获取输出。我想按用户和问题进行分组(但这个问题信息已经在答案栏中,因为它是问题中的NaN,与给定答案无关,请参阅下文),并获取每个答案栏的方法。pandas groupby和更多列上的均值聚合

Q代表提问,A代表回答

输入:

import pandas as pd 
import numpy as np 

df = pd.DataFrame(
    data={ 
     'userid':[11,11,11,12,13,13], 
     'Q':['Q1','Q2','Q1','Q3','Q1','Q1'], 
     'A1':[1,np.NaN,0,np.NaN,0.8,0.6], 
     'A2':[np.NaN,1,np.NaN,np.NaN,np.NaN,np.NaN], 
    }, 
    index=range(1,7) 
) 

input

我的预期暂时状态 - 你不必使用:

temp_df = pd.DataFrame(
    data={ 
     'userid':[11,12,13], 
     'A1':[0.5,np.NaN,0.7], 
     'A2':[1,np.NaN,np.NaN], 
    }, 
    index=range(1,4) 
) 

的最终期望的数据帧:

desired_df = pd.DataFrame(
    data={ 
     'userid':[11,12,13], 
     'A1':[0.5,0.6,0.7], 
     'A2':[1,1,1], 
    }, 
    index=range(1,4) 
) 

final, desired

+0

'temp_df = df.groupby(df.userid).mean()',但你如何计算'desired_df'的 '手段'?例如,'0.6'是如何产生的?你是否混合了不同用户的数据? – mhoff

+0

是的,但现在解决了,感谢您的关注! – PEZO

回答

0

您可以在userid列中使用groupby和计算手段的答案栏,让您的数据框的中间(temp_df)。然后,您可以使用列方式填充缺失值以获取最终数据框(desired_df)。

temp_df = df.groupby('userid')[['A1', 'A2']].mean() 
desired_df = temp_df.fillna(temp_df.mean()) 

print desired_df给出:

  A1 A2 
userid 
11  0.5 1.0 
12  0.6 1.0 
13  0.7 1.0 
+0

非常感谢你的队友! – PEZO