我试图获取给出总和的每一天的百分比。
我每天都有日期时间索引的数据,并且使用方法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
答案 0 :(得分:3)
您可以将transform
与resample
一起使用,并根据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