使用GroupBy将函数应用于Pandas沿着分组变量的方向

时间:2017-07-06 08:38:25

标签: pandas grouping

我有一群N人,我计算了一些数量的相关矩阵(q1_score,... q5_score)

    df.groupby('participant_id').corr()
    Out[130]: 
                                q1_score    q2_score   q3_score  q4_score   q5_score
    participant_id                                                                      
    11.0           q1_score     1.000000   -0.748887  -0.546893  -0.213635  -0.231169
                   q2_score    -0.748887    1.000000   0.639649   0.324976   0.335596
                   q3_score    -0.546893    0.639649   1.000000   0.154539   0.151233
                   q4_score    -0.213635    0.324976   0.154539   1.000000   0.998752              
                   q5_score    -0.231169    0.335596   0.151233   0.998752   1.000000
    14.0           q1_score     1.000000   -0.668781  -0.124614  -0.352075  -0.244251
                   q2_score    -0.668781    1.000000  -0.175432   0.360183   0.184585
                   q3_score    -0.124614   -0.175432   1.000000  -0.137993  -0.125115
                   q4_score    -0.352075    0.360183  -0.137993   1.000000   0.968564
                   q5_score    -0.244251    0.184585  -0.125115   0.968564   1.000000
    17.0           q1_score     1.000000   -0.799223  -0.814424  -0.790587  -0.777318
                   q2_score    -0.799223    1.000000   0.787238   0.658524   0.640786
                   q3_score    -0.814424    0.787238   1.000000   0.702570   0.701440
                   q4_score    -0.790587    0.658524   0.702570   1.000000   0.998996
                   q5_score    -0.777318    0.640786   0.701440   0.998996   1.000000
    18.0           q1_score     1.000000   -0.595545  -0.617691  -0.472409  -0.477523
                   q2_score    -0.595545    1.000000   0.386705   0.148761   0.115068
                   q3_score    -0.617691    0.386705   1.000000   0.806637   0.782345
                   q4_score    -0.472409    0.148761   0.806637   1.000000   0.982617
                   q5_score    -0.477523    0.115068   0.782345   0.982617   1.000000

我需要计算所有参与者的相关系数的中值吗?我的意思是:我需要接受考虑。在所有参与者的项目J和项目K之间找到它们的中值。

我确信这是一行代码,但我很难实现(仍然通过示例学习大熊猫)。

2 个答案:

答案 0 :(得分:2)

堆叠您的数据,并执行另一个组:

df.groupby('participant_id').corr().stack().groupby(level = [1,2]).median()

编辑:实际上,如果您不想,则不需要堆叠:

df.groupby('participant_id').corr().groupby(level = [1]).median()

也有效。

答案 1 :(得分:2)

IIUC,您希望所有问题的每个参与者的平均均值:

df.where(df != 1).mean(axis=1).mean(level=0)

让我们摆脱与where相同问题的相关性,然后通过participant_id获取axis=1方向的所有问题的均值,然后得到participant_id意为level=0

输出:

participant_id
11.0    0.086416
14.0   -0.031493
17.0    0.130800
18.0    0.105896
dtype: float64

编辑:我使用mean而不是中位数,我们可以用中位数做同样的逻辑。

df.where(df != 1).median(axis=1).median(level=0)