Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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_Dataframe - Fatal编程技术网

Python 如何标记值​;根据特定规则在一系列中?

Python 如何标记值​;根据特定规则在一系列中?,python,pandas,dataframe,Python,Pandas,Dataframe,我想在我的职业生涯中发现积极和消极的波动。那么如何标记数据呢 示例 我的数据: 我想要的结果是: | date | value | sign | |---------------------|-------|------| | 2018-09-06 00:00:03 | 0 | 1 | | 2018-09-06 00:00:04 | 0 | 1 | | 2018-09-06 00:00:05 | 1 | 1 | | 2018

我想在我的职业生涯中发现积极和消极的波动。那么如何标记数据呢
示例
我的数据:

我想要的结果是:

| date                | value | sign |
|---------------------|-------|------|
| 2018-09-06 00:00:03 | 0     | 1    |
| 2018-09-06 00:00:04 | 0     | 1    |
| 2018-09-06 00:00:05 | 1     | 1    |
| 2018-09-06 00:00:06 | 1     | 1    |
| 2018-09-06 00:00:07 | 2     | 1    |
| 2018-09-06 00:00:08 | -1    | 2    |
| 2018-09-06 00:00:09 | -5    | 2    |
| 2018-09-06 00:00:10 | 0     | 2    |
| 2018-09-06 00:00:11 | -6    | 2    |
| 2018-09-06 00:00:12 | 2     | 3    |
| 2018-09-06 00:00:13 | 0     | 3    |
| 2018-09-06 00:00:14 | 4     | 3    |
然后:

mydata.groupby(['sign']).transform('sum'))
使用+:


采样数据不包括正波和负波由零分隔的情况,例如
1 0 0-1
。以下是一个解决方案,涵盖了这一情况:

# mask the zeros
s = mydata['value'].eq(0)

# merge the zeros to the wave after them
m = np.sign(mydata['value']).mask(s).bfill()

# result
mydata['sign'] = m.diff().ne(0).cumsum()

如果您的数据有
100-1
,会发生什么情况?您好@ansev。谢谢你的回复。我查过你的密码了。但是输出有错误。如果你想检查结果:你好,广黄。谢谢你解决了我的问题。成功了!
mydata['sign']=(mydata['value']*mydata['value'].shift()<0).cumsum()+1
print(mydata)

                   date  value  sign
0   2018-09-06-00:00:03      0     1
1   2018-09-06-00:00:04      0     1
2   2018-09-06-00:00:05      1     1
3   2018-09-06-00:00:06      1     1
4   2018-09-06-00:00:07      2     1
5   2018-09-06-00:00:08     -1     2
6   2018-09-06-00:00:09     -5     2
7   2018-09-06-00:00:10      0     2
8   2018-09-06-00:00:11     -6     2
9   2018-09-06-00:00:12      2     3
10  2018-09-06-00:00:13      0     3
11  2018-09-06-00:00:14      4     3
mydata[['sum_value','sum_sign']]=mydata.groupby(['sign'])[['value','sign']].transform('sum')
print(mydata)
                   date  value  sign  sum_value  sum_sign
0   2018-09-06-00:00:03      0     1          4         5
1   2018-09-06-00:00:04      0     1          4         5
2   2018-09-06-00:00:05      1     1          4         5
3   2018-09-06-00:00:06      1     1          4         5
4   2018-09-06-00:00:07      2     1          4         5
5   2018-09-06-00:00:08     -1     2        -12         8
6   2018-09-06-00:00:09     -5     2        -12         8
7   2018-09-06-00:00:10      0     2        -12         8
8   2018-09-06-00:00:11     -6     2        -12         8
9   2018-09-06-00:00:12      2     3          2         6
10  2018-09-06-00:00:13      0     3          2         6
# mask the zeros
s = mydata['value'].eq(0)

# merge the zeros to the wave after them
m = np.sign(mydata['value']).mask(s).bfill()

# result
mydata['sign'] = m.diff().ne(0).cumsum()