[英]Fetching data from a dataframe in python
我有3000原始数据,包括时间和消耗的能量。 但是这个能量值是累积的总和,我需要获得每个月的每月消耗值。
我想知道如何遍历同一月的数据并从同一月的第一个值减去每个月的最后一个值。 我每个月的数据数量与其他月份不同。 此列表的第一个值如下:
Time Energy
2017-01-01 0.0
2017-01-01 456682295.279
2017-01-01 576253341.508
2017-01-01 693234839.384
2017-01-02 810613281.137
2017-01-02 928960004.805
.
.
.
如果您的数据采用数据框的形式。 然后可以将数据按时间变量分组。
考虑您的数据在变量df中 。 将您的Time变量转换为字符串,并仅使用7个字符,以便仅表示月份
df=df.drop(df.index[0])
df.columns= ["Time","Energy"]
df['Time']= df["Time"].map(lambda x: x[:7]) # Should be of form yyyy-mm
def diff(x):
return max(x) - min(x)
df.groupby(["Time"]).agg(diff)
您可以按月分组并使用pd.TimeGrouper
。 这是一个简单的例子。
设定
df = pd.DataFrame({'Time': ['2017-01-01', '2017-01-01', '2017-01-02', '2017-01-02',
'2017-02-01', '2017-02-01', '2017-02-02', '2017-02-02',
'2017-03-01', '2017-03-01', '2017-03-02', '2017-03-02'],
'Energy': list(range(12))})
df['Time'] = pd.to_datetime(df['Time'])
解
res = df.set_index('Time').sort_index()
res = res.groupby(pd.TimeGrouper('M')).nth(0).reset_index()
res['Monthly'] = res['Energy'].diff().fillna(0)
结果
Time Energy Monthly
0 2017-01-31 0 0.0
1 2017-02-28 4 4.0
2 2017-03-31 8 4.0
你可以试试看
import itertools
for item, group in itertools.groupby(data, lambda x: x["Time"][:7]):
total = sum([each_item["Energy"] for each_item in group]) # Here you sum
UPD:成组循环,您只能迭代一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.