pandas groupby和更多列的平均聚合

时间:2017-04-11 15:59:27

标签: pandas

我找不到任何方法来获取输入的输出。我想按用户和问题分组,(但这个问题信息已经在答案栏中,因为问题中的NaN与给定的答案无关,见下文)并获得每个答案栏的方法。

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

1 个答案:

答案 0 :(得分:1)

您可以在result = 0 digits = np.random.randint(0,10,20) for idx,digit in enumerate(digits): result += digit*(10**idx) 列上使用groupby并计算答案列的方法,以获取您的中间数据框(userid)。然后,您可以使用列方式填充缺失的值,以获取最终的数据帧(temp_df)。

desired_df

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

print desired_df