如何根据列中的条件进行计算?

奥马尔·蒙特罗

当有一组连续跟踪时,我想进行计算。

我有一个有关压缩机工作方式的数据库。每隔5分钟,如果压缩机处于开/关状态,我会得到压缩机状态,并且此时会消耗电力。压缩机工作时(开启)和关闭时,该列On_Off都有一个10

Compresor = pd.Series([0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,1,1,0], index = pd.date_range('1/1/2012', periods=18, freq='5 min'))
df = pd.DataFrame(Compresor)
df.index.rename("Date", inplace=True)
df.set_axis(["ON_OFF"], axis=1, inplace=True)
df.loc[(df.ON_OFF == 1), 'Electricity'] = np.random.randint(4, 20, df.sum())
df.loc[(df.ON_OFF < 1), 'Electricity'] = 0
df


                             ON_OFF     Electricity
      Date              
      2012-01-01 00:00:00       0       0.0
      2012-01-01 00:05:00       0       0.0
      2012-01-01 00:10:00       1       4.0
      2012-01-01 00:15:00       1       10.0
      2012-01-01 00:20:00       1       9.0
      2012-01-01 00:25:00       0       0.0
      2012-01-01 00:30:00       0       0.0
      2012-01-01 00:35:00       1       17.0
      2012-01-01 00:40:00       1       10.0
      2012-01-01 00:45:00       1       5.0
      2012-01-01 00:50:00       0       0.0
      2012-01-01 00:55:00       0       0.0
      2012-01-01 01:00:00       0       0.0
      2012-01-01 01:05:00       0       0.0
      2012-01-01 01:10:00       1       14.0
      2012-01-01 01:15:00       1       5.0
      2012-01-01 01:20:00       1       19.0
      2012-01-01 01:25:00       0       0.0

我想做的是仅在有一组的情况下才增加耗电量,然后再做一个Data.Frame例如:

在此处输入图片说明

在此示例中,第一次开启压缩机的时间为00:20 -00:30。在此期间,它消耗了25(10 + 10 + 5)。第二次持续时间较长(00:50-01:15),并在此间隔50(10 + 10 + 10 + 10 + 10 + 5 + 5)中消耗。第三次消耗20(10 + 10)。

我想自动进行此操作,因为我是熊猫的新手,所以我想不出一种方法。

德雷

假设您有以下数据:

from operator import itemgetter

import numpy as np
import numpy.random as rnd
import pandas as pd
from funcy import concat, repeat
from toolz import partitionby

base_data = {
    'time': list(range(20)),
    'state': list(concat(repeat(0, 3), repeat(1, 4), repeat(0, 5), repeat(1, 6), repeat(0, 2))),
    'value': list(concat(repeat(0, 3), rnd.randint(5, 20, 4), repeat(0, 5), rnd.randint(5, 20, 6), repeat(0, 2)))
}

好吧,有两种方法:

第一个是功能性的,并且与之无关pandas:您只需partition按字段输入数据,即该方法将按顺序处理数据并在字段值每次更改时生成一个新分区。然后,您可以根据需要简单地汇总每个分区。

# transform into sample data
sample_data = [dict(zip(base_data.keys(), x)) for x in zip(*base_data.values())]
# and compute statistics the functional way
[sum(x['value'] for x in part if x['state'] == 1)
 for part in partitionby(itemgetter('state'), sample_data)
 if part[0]['state'] == 1]

还有一种pandas方法,类似于@ivallesp提到的方法:您可以通过移动state列来计算状态的变化。然后您按组总结数据框架


pd_data = pd.DataFrame(base_data)
pd_data['shifted_state'] = pd_data['state'].shift(fill_value = pd_data['state'][0])
pd_data['cum_state'] = np.cumsum(pd_data['state'] != pd_data['shifted_state'])
pd_data[pd_data['state'] == 1].groupby('cum_state').sum()

根据您和您的同龄人最能阅读的内容,您可以选择自己的方式。同样,功能方式可能不容易阅读,也可以用可读的循环语句重写。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据python中的特定条件对值进行排序?

如何使用大熊猫中的groupby根据另一列中的条件计算百分比总数

如何根据条件对多索引数据框中的列值进行计数

如何使用熊猫中的条件进行计算?

根据多个条件计算列

如何使用data.table根据条件计算列总和?

根据数据帧中的条件进行分组的列

在熊猫中,如何根据列中的条件使用groupby计算行数?

如何按列条件正确选择熊猫行进行计算

如何根据另一列中的值进行条件替换列中的值?

在oracle SQL中,如何根据条件计算记录数

Python-如何根据各种列对行进行条件计数?

如何根据条件在列中的数字和值之间进行合并

如何根据计算条件创建新的列基础?

如何根据t-sql中的条件对一列的值进行分组?

如何根据Python中的条件在不同的列中对值进行排名(将Excel计算转移到Python)?

如何根据特定条件对列中的字段进行分组

如何根据Scala中的某些条件计算值

如何根据dplyr中的条件进行过滤?

如何在pandas数据帧中的列之间进行条件计算?

如何对查询中的计算列进行 GROUP BY?

Pandas - 如何根据多个二进制列中的条件对比率进行分组?

如何根据pandas中的不同条件和列对2个数据框进行分组

根据 if else 条件计算列

如何根据python中其他列的条件计算值?

在熊猫数据框中,如何根据列值过滤行,进行计算并将结果分配给新列?

根据另一列中满足的条件进行过滤

如何根据python中的条件进行连接

根据列中的条件使用 dplyr 进行切片