2017-07-24 82 views
1

我們假設我計算了一定時間內有多少人吃橘子(Orange)和蘋果(Apple)人(id)。我也知道他們是年輕人還是老年人(group)。熊貓數據幀將可能是這樣的:與熊貓數據框中的組含義差異?

df = pd.DataFrame({'id' : ['1','2','3','7'], 
        'group' : ['Young', 'Young', 'Old', 'Old'], 
         'Apple' : [7,2,5,4], 
         'Orange' : [3,6,4,4], 
         }) 

我們可以通過groupby()很容易地計算方式。 E. G:

df.Apple.groupby(df.group).mean() 

輸出

Old  4.5 
Young 4.5 

但是,讓我們說,我想找到多少蘋果和橘子的消費金額不同的組每個個體是什麼意思?

也就是說,輸出應該是

df = pd.DataFrame({'id' : ['1','2','3','7'], 
        'group' : ['Young', 'Young', 'Old', 'Old'], 
         'Apple' : [7,2,5,4], 
         'Orange' : [3,6,4,4], 
         'Apple Difference' : [2.5, -2.5, 0.5, -0.5], 
         }) 

有沒有辦法與熊貓/ numpy的做到這一點?對不起,ROCKIE個問題的最佳/ R

回答

1

您可以通過sub需要transformmean具有相同lengthdf和。減去:

print (df.groupby('group')['Apple'].transform('mean')) 
0 4.5 
1 4.5 
2 4.5 
3 4.5 
Name: Apple, dtype: float64 

df = pd.DataFrame({'id' : ['1','2','3','7'], 
        'group' : ['Young', 'Young', 'Old', 'Old'], 
         'Apple' : [7,2,5,4], 
         'Orange' : [3,6,4,4], 
         }) 
df['Apple Difference'] = df['Apple'].sub(df.groupby('group')['Apple'].transform('mean')) 
print (df) 
    Apple Orange group id Apple Difference 
0  7  3 Young 1    2.5 
1  2  6 Young 2    -2.5 
2  5  4 Old 3    0.5 
3  4  4 Old 7    -0.5 
+0

肯定在今天的作用,@jezreal :)謝謝!我會將它標記爲已儘快答覆 – Rachel

+1

我的意思是寫* roll,sorry – Rachel