2017-04-11 83 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