两个相同的代码示例给出不同的结果

时间:2017-02-28 12:58:52

标签: python pandas

这是一个示例数据框df

TIME  VP_1  VP_2  VP_3   EVAL
20    3242  3244  3245   0
24    3244  3244  3242   0
30    3456  3244  3456   1
33    3456  3245  3242   0
45    3242  3456  3245   1

TIME等于VP_*EVAL时,我计算的每0平均1

这是VP的示例输出,等于3242

VP     EVAL   AVG_TIME
3242   0      25.67
3242   1      45

问题是我在真实数据集上应用以下两个相同的代码时会得到不同的结果。我无法理解为什么会发生这种情况以及哪种方法(这两种方法)是正确的。

代码#1

grouped = (pd.melt(df, id_vars=['EVAL', 'TIME'], value_name='VP')
 .drop('variable', axis=1).drop_duplicates()
 .groupby(['EVAL', 'VP']).agg({'TIME' : 'mean'})
 .reset_index())

代码#2

cols = ['VP', 'TIME', 'EVAL']
grouped = pd.melt(
    df, ['TIME', 'EVAL'],
    ['VP_1', 'VP_2', 'VP_3'],
    value_name='VP')[cols]
ab = grouped.groupby(['EVAL','VP']).agg({'TIME' : 'mean'}).reset_index()

1 个答案:

答案 0 :(得分:1)

drop_duplicates存在差异:

drop('variable', axis=1)[cols]相同 - 都删除了列variable

.drop_duplicates()

因此,行612已删除,因为重复:

grouped = pd.melt(df, id_vars=['EVAL', 'TIME'], value_name='VP')
            .drop('variable', axis=1).drop_duplicates()
print (grouped)
    EVAL  TIME    VP
0      0    20  3242
1      0    24  3244
2      1    30  3456
3      0    33  3456
4      1    45  3242
5      0    20  3244
7      1    30  3244
8      0    33  3245
9      1    45  3456
10     0    20  3245
11     0    24  3242
13     0    33  3242
14     1    45  3245
cols = ['VP', 'TIME', 'EVAL']
grouped = pd.melt(df, ['TIME', 'EVAL'], ['VP_1', 'VP_2', 'VP_3'], value_name='VP')[cols]
print (grouped)
      VP  TIME  EVAL
0   3242    20     0
1   3244    24     0
2   3456    30     1
3   3456    33     0
4   3242    45     1
5   3244    20     0
6   3244    24     0
7   3244    30     1
8   3245    33     0
9   3456    45     1
10  3245    20     0
11  3242    24     0
12  3456    30     1
13  3242    33     0
14  3245    45     1