2015-10-31 109 views
0

我是熊貓新手。我創建了這個數據透視表,但我需要弄清楚如何在每天的'is_match'值中應用一個函數。請參閱下面的img數據頭。Panda數據透視表中的熊貓列計算

我需要的是每個應用程序(行)的每一天都是true的值(reward_count)的百分比。

即日期='2015-10-22',總(真+假)= 59,101。 %true將爲1,080/59,101 = 0.018%。對於每個日期,我只想看到這個%真實值代替真/假計數。

原始數據:

date app_name is_match rewards_count 
10/22/15 NFL HUDDLE 2016 FALSE 45816 
10/22/15 NFL HUDDLE 2016 TRUE 1080 
10/22/15 NFL HUDDLE 2016 FALSE 8 
10/22/15 NFL HUDDLE 2016 FALSE 128239 
10/23/15 NFL HUDDLE 2016 TRUE 908 
10/23/15 NFL HUDDLE 2016 FALSE 18 
10/24/15 NFL HUDDLE 2016 TRUE 638 

數據幀:

table = pd.pivot_table(df, index=['app_name'], 
         columns=['date','is_match'], 
         values = 'rewards_count') 

sample data

非常感謝你的幫助。我花了半天時間瀏覽Pandas文檔,但不知道我在找什麼/參考什麼。

+0

可以在appl之前發佈原始數據幀的少量記錄ying樞軸。? – WoodChopper

+0

原因是您創建日期作爲列的關鍵,因此計算每個日期的平均值會更困難。你可以用group來處理。 – WoodChopper

回答

1

採用多指標可以幫助:

table = pd.pivot_table(apps, index=['app_name', 'date'], 
         columns=['is_match'], 
         values = 'rewards_count', 
         aggfunc=np.sum, 
         margins=True) 

我總結了aggfunc=np.sum所有罪名,並與margins=True計算 總和TrueFalse。 這些款項最終在All

is_match     False True  All 
app_name  date       
NFL HUDDLE 2016 10/22/15 174063 1080 175143 
       10/23/15  18 908  926 
       10/24/15 79322 638 79960 
All      253403 2626 256029 

我補充一點,持有比例兩個新列:

table['percent_false'] = table[False]/table.All * 100 
table['percent_true'] = table[True]/table.All * 100 

結果是這樣的:

is_match     False True  All percent_false percent_true 
app_name  date              
NFL HUDDLE 2016 10/22/15 174063 1080 175143  99.383361  0.616639 
       10/23/15  18 908  926  1.943844  98.056156 
       10/24/15 79322 638 79960  99.202101  0.797899 
All      253403 2626 256029  98.974335  1.025665 

有很多的表中額外的東西。只有你想要的選擇:

percent_true = table.ix[:-1, ['percent_true']] 

給出:

is_match     percent_true 
app_name  date     
NFL HUDDLE 2016 10/22/15  0.616639 
       10/23/15  98.056156 
       10/24/15  0.797899 

如果你想計數的平均值,因爲你在你的方法做, 不要使用aggfunc=np.sum。您還需要手工來總結:

table = pd.pivot_table(apps, index=['app_name', 'date'], 
         columns=['is_match'], 
         values = 'rewards_count') 
table['total'] = table[False] + table[True] 
table['percent_false'] = table[False]/table.total * 100 
table['percent_true'] = table[True]/table.total * 100 

現在的結果是這樣的:

is_match     False True total percent_false percent_true 
app_name  date              
NFL HUDDLE 2016 10/22/15 58021 1080 59101  98.172620  1.827380 
       10/23/15  18 908 926  1.943844  98.056156 
       10/24/15 79322 638 79960  99.202101  0.797899 

同樣,只選擇相關部分:

percent_true = table[['percent_true']] 

給出:

is_match     percent_true 
app_name  date     
NFL HUDDLE 2016 10/22/15  1.827380 
       10/23/15  98.056156 
       10/24/15  0.797899