数据透视表中的Pandas列计算

时间:2015-10-31 07:51:27

标签: python pandas

我是熊猫新手。我创建了这个数据透视表,但是我需要弄清楚如何在' is_match'中每天都应用一个函数。仅限值。请参阅下面的img数据头。

我需要的是每个应用(行)每天的值%(reward_count)。

即。对于date =' 2015-10-22',total(true + false)= 59,101。 %true将是1,080 / 59,101 = 0.018%。对于每个日期,我只想看到这个%true值代替真/假计数。

原始数据:

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文档,但不知道我在寻找什么/引用什么。

1 个答案:

答案 0 :(得分:1)

使用多索引可以提供帮助:

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

我用aggfunc=np.sum总结所有计数并计算出来 TrueFalsemargins=True的总和。 这些总和最终在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