在python中从数据帧获取数据

2024-04-24 03:37:09 发布

您现在位置: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
.
.
.

Tags: 数据列表原始数据time时间energy能量月份
3条回答

如果您的数据是数据帧的形式。然后数据可以按时间变量分组。在

假设您的数据位于变量df中。把你的时间变量转换成字符串,只取其中的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'])

解决方案

^{pr2}$

结果

        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:group-in-loop,因为您只能迭代一次。在

相关问题 更多 >