首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据索引值对数据列进行计算

根据索引值对数据列进行计算
EN

Stack Overflow用户
提问于 2019-06-25 11:56:32
回答 1查看 319关注 0票数 1

我必须每月规范化一个dataframe列Allocation的值。

代码语言:javascript
复制
data=
                     Allocation  Temperature  Precipitation  Radiation
Date_From                                                             
2018-11-01 00:00:00    0.001905         9.55            0.0        0.0
2018-11-01 00:15:00    0.001794         9.55            0.0        0.0
2018-11-01 00:30:00    0.001700         9.55            0.0        0.0
2018-11-01 00:45:00    0.001607         9.55            0.0        0.0

这意味着,如果2018-11,除以Allocation 11.116,而2018-12,除以2473.65,依此类推.(这些值来自列表Volume,其中Volume[0]对应于2018-11,而Volume[7]对应于2019-06)。

Date_From是一个索引和一个时间戳。

代码语言:javascript
复制
data_normalized=
                     Allocation  Temperature  Precipitation  Radiation
Date_From                                                             
2018-11-01 00:00:00    0.000171         9.55            0.0        0.0
2018-11-01 00:15:00    0.000097         9.55            0.0        0.0
...

我的方法是使用迭代:

代码语言:javascript
复制
for row in data.itertuples(index=True,name='index'):
    if row.index =='2018-11':
        data['Allocation']/Volume[0]

在这里,如果声明是不正确的..。

另一种方法是if ((row.index >='2018-11-01 00:00:00') & (row.index<='2018-11-31 23:45:00')):,这里我得到了错误TypeError: '>=' not supported between instances of 'builtin_function_or_method' and 'str'

我可以用这种方法解决我的问题,还是应该使用不同的方法?任何帮助我都很高兴

干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-25 12:22:42

也许您可以将列表Volume放在一个日期(或索引)是每个月的第一天的数据中。

代码语言:javascript
复制
import pandas as pd
import numpy as np

N = 16
date = pd.date_range(start='2018-01-01', periods=N, freq="15d")
df = pd.DataFrame({"date":date, "Allocation":np.random.randn(N)})

# A dataframe where at every month associate a volume
df_vol = pd.DataFrame({"month":pd.date_range(start="2018-01-01", periods=8, freq="MS"),
                       "Volume": np.arange(8)+1})

# convert every date with the beginning of the month
df["month"] = df["date"].astype("datetime64[M]")

# merge
df1 = pd.merge(df,df_vol, on="month", how="left")

# divide allocation by Volume. 
# Now it's vectorial as to every date we merged the right volume.
df1["norm"] = df1["Allocation"]/df1["Volume"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56753511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档