我是熊猫新手。我创建了这个数据透视表,但是我需要弄清楚如何在' 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')
非常感谢你的帮助。我花了半天时间查看Pandas文档,但不知道我在寻找什么/引用什么。
答案 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
总结所有计数并计算出来
True
和False
与margins=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