2017-10-11 81 views
1

我有這樣一個數據幀:創建基於對大熊貓一個標準的虛擬varuable

date   sales  company country 
16/03/2012  3000  H&M  US 
13/04/2012  2300  H&M  US 
26/03/2012  1230  H&M  FR 
13/04/2012  1300  H&M  FR 
23/03/2012  2230  H&M  IT 
19/04/2012  1100  H&M  IT 
16/03/2012  3000  ABC  US 
13/04/2012  2300  ABC  US 
26/03/2012  100  ABC  FR 
13/04/2012  60   ABC  FR 
23/03/2012  435  ABC  IT 
19/04/2012  300  ABC  IT 

我要定義一個標準:一個公司被認爲是一個INTERNATINAL,如果低於50%的( avarage)來自單一國家的銷售額。我想創建一個新的列,如果它是國際的,則值爲1,否則爲0。最終輸出應該是這樣的:

date   sales  company country international 
    16/03/2012  3000  H&M  US   1 
    13/04/2012  2300  H&M  US   1 
    26/03/2012  1230  H&M  FR   1 
    13/04/2012  1300  H&M  FR   1 
    23/03/2012  2230  H&M  IT   1 
    19/04/2012  1100  H&M  IT   1 
    16/03/2012  3000  ABC  US   0 
    13/04/2012  2300  ABC  US   0 
    26/03/2012  100  ABC  FR   0 
    13/04/2012  60   ABC  FR   0 
    23/03/2012  435  ABC  IT   0 
    19/04/2012  300  ABC  IT   0 

我該怎麼做? P.S:數據集中可能缺少銷售值,我怎麼能忽略這些值?

回答

2

使用transform爲手段,comapre他們與總all GROUPBY進行檢查,如果所有的值返回True S:

s2 = df.groupby('company')['sales'].transform('mean')/2 
print (s2) 
0  930.00 
1  930.00 
2  930.00 
3  930.00 
4  930.00 
5  930.00 
6  516.25 
7  516.25 
8  516.25 
9  516.25 
10 516.25 
11 516.25 
Name: sales, dtype: float64 

s1 = df.groupby(['company', 'country'])['sales'].transform('mean') 
print (s1) 
0  2650.0 
1  2650.0 
2  1265.0 
3  1265.0 
4  1665.0 
5  1665.0 
6  2650.0 
7  2650.0 
8  80.0 
9  80.0 
10  367.5 
11  367.5 
Name: sales, dtype: float64 

df['international'] = (s1 > s2).groupby(df['company']).transform('all').astype(int) 
print (df) 
      date sales company country international 
0 16/03/2012 3000  H&M  US    1 
1 13/04/2012 2300  H&M  US    1 
2 26/03/2012 1230  H&M  FR    1 
3 13/04/2012 1300  H&M  FR    1 
4 23/03/2012 2230  H&M  IT    1 
5 19/04/2012 1100  H&M  IT    1 
6 16/03/2012 3000  ABC  US    0 
7 13/04/2012 2300  ABC  US    0 
8 26/03/2012 100  ABC  FR    0 
9 13/04/2012  60  ABC  FR    0 
10 23/03/2012 435  ABC  IT    0 
11 19/04/2012 300  ABC  IT    0 
+2

我有類似的東西,但沒有你們以前做這個的機會得到迴應。不過,我會將df2和df1更改爲s1和s2,因爲它們是系列而不是數據框+1 –

+1

vaaw偉大的回答:) – edyvedy13