Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算时间序列中的连续值_Python_Pandas_Count_Trend - Fatal编程技术网

Python 计算时间序列中的连续值

Python 计算时间序列中的连续值,python,pandas,count,trend,Python,Pandas,Count,Trend,这是我第一次在这里问问题,所以我希望我能做得对 我有一个数据框: df2.data Out[66]: date 2016-01-02 0.0 2016-01-03 1.0 2016-01-04 1.0 2016-01-05 1.0 2016-01-06 0.0 2016-01-07 0.0 2016-01-08 1.0 2016-01-09 2.0 2016-01-10 1.0 2016-01-11 0.0 Name: data, d

这是我第一次在这里问问题,所以我希望我能做得对

我有一个数据框:

df2.data
Out[66]: 
date
2016-01-02    0.0
2016-01-03    1.0
2016-01-04    1.0
2016-01-05    1.0
2016-01-06    0.0
2016-01-07    0.0
2016-01-08    1.0
2016-01-09    2.0
2016-01-10    1.0
2016-01-11    0.0
Name: data, dtype: float64
我希望得到以下结果:

            data  trend  trend_type
date                               
2016-01-02   0.0      0           0
2016-01-03   1.0      0           0
2016-01-04   1.0      1           1
2016-01-05   1.0      2           1
2016-01-06   0.0      0           0
2016-01-07   0.0      1           0
2016-01-08   1.0      0           0
2016-01-09   2.0      0           0
2016-01-10   1.0      0           0
2016-01-11   0.0      0           0
我的问题有点和你有关

到目前为止,我成功地获得了趋势,但它的效率不够(对于750行数据帧,大约8秒)


步骤1
要获取
趋势
,请执行
groupby
+
cumcount
-

df['trend'] = df.data.groupby(df.data.ne(df.data.shift()).cumsum()).cumcount()
df

            data  trend
2016-01-02   0.0      0
2016-01-03   1.0      0
2016-01-04   1.0      1
2016-01-05   1.0      2
2016-01-06   0.0      0
2016-01-07   0.0      1
2016-01-08   1.0      0
2016-01-09   2.0      0
2016-01-10   1.0      0
2016-01-11   0.0      0
步骤2
(IIUC),要获取趋势类型,请比较连续行并分配

df['trend_type'] = 0
m = df.data.eq(df.data.shift())
df.loc[m, 'trend_type'] = df.loc[m, 'data']

df

            data  trend  trend_type
2016-01-02   0.0      0         0.0
2016-01-03   1.0      0         0.0
2016-01-04   1.0      1         1.0
2016-01-05   1.0      2         1.0
2016-01-06   0.0      0         0.0
2016-01-07   0.0      1         0.0
2016-01-08   1.0      0         0.0
2016-01-09   2.0      0         0.0
2016-01-10   1.0      0         0.0
2016-01-11   0.0      0         0.0
编辑,添加列“trep_类型”


什么是趋势类型?你能解释一下你是如何得到这些结果的吗?为了得到趋势,你可以很容易地做一个groupby-
df.date.groupby(df.date.shift()).cumsum()).cumcount()
如果你能解释什么是
trend\u type
,那就太好了。你好。对不起,不够清楚。趋势类型是指趋势(消费数据系列)是0、1还是2。默认情况下,它是一个0。这些结果是我写的。你是怎么计算的还不清楚。你的数据和你的解释不符合……这正是我要找的!非常感谢你的帮助!而且执行速度非常快,太完美了!我祝你有一个非常美好的一天,你刚刚做了我的@罗杰:别忘了,这也会让我开心的谢谢你关心我的问题曼纽尔!我认为你的解决方案有点像我的第一次尝试,问题是执行时间
df['trend_type'] = 0
m = df.data.eq(df.data.shift())
df.loc[m, 'trend_type'] = df.loc[m, 'data']

df

            data  trend  trend_type
2016-01-02   0.0      0         0.0
2016-01-03   1.0      0         0.0
2016-01-04   1.0      1         1.0
2016-01-05   1.0      2         1.0
2016-01-06   0.0      0         0.0
2016-01-07   0.0      1         0.0
2016-01-08   1.0      0         0.0
2016-01-09   2.0      0         0.0
2016-01-10   1.0      0         0.0
2016-01-11   0.0      0         0.0
df.loc[0, "trend"] = 0
df.loc[0, "trend_type"] = 0

for nrow in range(df.shape[0]-1):

    if df.loc[nrow+1, 1] == df.loc[nrow, 1]:
        df.loc[nrow+1, "trend"] = df.loc[nrow, "trend"]+1
        df.loc[nrow + 1, "trend_type"] = 1
    else:
        df.loc[nrow + 1, "trend"] = 0
        df.loc[nrow + 1, "trend_type"] = 0