我有一些加速度資料,如果使用以下代碼在 accelpos 列中的加速度值 >=2.5 時,我已經設定了一個新列以給出 1
frame["new3"] = np.where((frame.accelpos >=2.5), '1', '0')
我最終以這樣的順序獲取資料
0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0
我想添加第二列以在每個序列的開頭給出 1,如下所示
0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
任何幫助將不勝感激
uj5u.com熱心網友回復:
您可以比較移位值Series.shift并僅獲取值'1',因此鏈條件 by &for 按位AND和最后一次轉換為整數以True/False進行1/0映射:
df = pd.DataFrame({'col':'0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0'.split(',')})
df['new'] = (df['col'].ne(df['col'].shift()) & df['col'].eq('1')).astype(int)
或測驗差異,但因為可能首先1需要將缺失值替換為原始值fillna:
s = df['col'].astype(int)
df['new'] = s.diff().fillna(s).eq(1).astype(int)
print (df)
col new
0 0 0
1 0 0
2 0 0
3 0 0
4 1 1
5 1 0
6 1 0
7 1 0
8 1 0
9 0 0
10 0 0
11 0 0
12 1 1
13 1 0
14 0 0
15 0 0
16 0 0
17 1 1
18 1 0
19 1 0
20 1 0
21 1 0
22 1 0
23 1 0
24 1 0
25 1 0
26 1 0
27 0 0
28 0 0
29 0 0
30 0 0
uj5u.com熱心網友回復:
我不熟悉 where 函式。我想我可能會嘗試從演算法的角度提供幫助。
假設我們有一個串列a = [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, ..., 0]
從演算法 POV 中,如果您想在此類序列的開頭將每個 1 序列替換為唯一的序列,那么這就是您想要做的:
- 決議串列
- 評估它是一還是零
- 如果它是 1,那么后面的每個專案都必須是 0,直到你實際上有一個 0
你可能想要這樣的東西:
a = [0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1]
for i in range(len(a)-1):
if a[i] == 1 :
for j in range(1,len(a)-i):
if a[i j] == 1:
a[i j] = 0
else :
break
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/478537.html
