2017-02-28 171 views
1

這是一個示例數據幀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 

我計算平均每VP_*TIMEEVAL等於01

這是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

沒有與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 
相關問題