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()