每天的百分比,其中总和是每天价值的总和

时间:2019-07-19 02:23:40

标签: python pandas dataframe datetime

我试图获取给出总和的每一天的百分比。

我每天都有日期时间索引的数据,并且使用方法sum类似于每年的索引,这是代码。

data_converted = data.resample('AS').sum() 

我想要获得每天的百分比:

这就是我想要做的

percentage=[ (data[all_day_in_year2000] / data_converted[year2000] )*100 ]

请注意,我的数据已超过一年

如果您认为我要问的太多了,那么您可以忽略这一点:

如果我可以将每日数据类似于月度数据或季度数据,那么它会很灵活。

谢谢您的考虑。

编辑

很抱歉没有发布我的数据

这是我的数据。

1986-01-02                                              25.56  
1986-01-03                                              26.00  
1986-01-06                                              26.53  
1986-01-07                                              25.85  
1986-01-08                                              25.87  
1986-01-09                                              26.03  
1986-01-10                                              25.65  
1986-01-13                                              25.08  
...                                                       ...  
2019-06-04                                              53.50  
2019-06-05                                              51.57  
2019-06-06                                              52.59  
2019-06-07                                              53.95  
2019-06-10                                              53.33  
2019-06-11                                              53.30 

当我使用总和重新采样时,我得到以下信息。

1986-01-01     3776.97
1987-01-01     4876.93
1988-01-01     4103.11
1989-01-01     5046.32
1990-01-01     6303.33
1991-01-01     5514.59

我想要的是第一个相对于第二个的百分比。它也可以存储在列表中,仅包含百分比而没有日期时间:

                    #value in daily /value in yearly*100
1986-01-02          (25.56 / 3776.97)*100
1986-01-03          (26.00 / 3776.97)*100
1986-01-06          (26.53 / 3776.97)*100
1986-01-07          (25.85 / 3776.97)*100

明年类似:

1986-02-03          (17.42 / 4876.93)*100   

3 个答案:

答案 0 :(得分:3)

您可以将transformresample一起使用,并根据transform的{​​{1}}的结果在每日价值之间进行计算

您的示例数据:(我只是获取您发布的部分数据)

sum

答案 1 :(得分:2)

我更喜欢使用groupby,然后按组申请:

by_year = data.groupby(pd.Grouper(freq='AS')) 
percentage = by_year.apply(lambda x: x/x.sum() * 100)

答案 2 :(得分:1)

只需逐年替换此答案,您就可以进行:

import numpy as np
import pandas as pd

df = pd.DataFrame({'a': pd.date_range('1986-01-01','1986-03-01',closed='left')})
df['b'] = df.a.dt.month

# this is the answer, just one liner
df['answer']=df.b/df.groupby(df.a.dt.month).b.transform('sum')*100

# just looking the sum, this is not required
df['just_check_sum'] = df.groupby(df.a.dt.month).b.transform('sum')

print(df.head())
           a  b    answer  just_check_sum
0 1986-01-01  1  3.225806              31 ===> 1/31*100 = 3.22 %
1 1986-01-02  1  3.225806              31
2 1986-01-03  1  3.225806              31
3 1986-01-04  1  3.225806              31
4 1986-01-05  1  3.225806              31