我有以下資料框:
Steps
0 False
1 False
2 True
3 True
4 True
5 False
6 True
7 True
8 False
9 False
10 False
11 True
我想True在附加列中對序列進行編號:
Steps Numbered
0 False 0
1 False 0
2 True 1
3 True 1
4 True 1
5 False 0
6 True 2
7 True 2
8 False 0
9 False 0
10 False 0
11 True 3
填充包含的行False是次要的。你有什么想法?
uj5u.com熱心網友回復:
您可以使用既為 True 又與前一個值不同的值(使用diff)來啟動cumsum:
df['Numbered'] = (df['Steps']&df['Steps'].diff()).cumsum().where(df['Steps'], 0)
輸出:
Steps Numbered
0 False 0
1 False 0
2 True 1
3 True 1
4 True 1
5 False 0
6 True 2
7 True 2
8 False 0
9 False 0
10 False 0
11 True 3
uj5u.com熱心網友回復:
鏈式移位值 by Series.shiftfor&按位ANDfor counter by first Trues 然后將False行設定為0by Series.where:
df['Numbered'] = ((df['Steps'] & ~df['Steps'].shift(fill_value=False)).cumsum()
.where(df['Steps'], 0))
print (df)
Steps Numbered
0 False 0
1 False 0
2 True 1
3 True 1
4 True 1
5 False 0
6 True 2
7 True 2
8 False 0
9 False 0
10 False 0
11 True 3
如果第一個值為:解決方案效果很好True:
df['Numbered'] = ((df['Steps'] & ~df['Steps'].shift(fill_value=False)).cumsum()
.where(df['Steps'], 0))
print (df)
Steps Numbered
0 True 1
1 False 0
2 True 2
3 True 2
4 True 2
5 False 0
6 True 3
7 True 3
8 False 0
9 False 0
10 False 0
11 True 4
uj5u.com熱心網友回復:
import numpy as np
import pandas as pd
steps =
['false','false','true','true','true',
'false','true','true','false','false','true']
data = pd.DataFrame({"steps":steps})
numbred =[]
c = 0
for i in range(len(data.index)):
if data['steps'][i] == 'false':
numbred.append(0)
if data['steps'][i 1] == 'true':
c = 1
else:
numbred.append(c)
data = pd.DataFrame({"steps":steps,'numbred':numbred})
print(data)
輸出:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/491348.html
上一篇:一起使用Loc和Iloc
