我有一個包含兩列的資料框:
A B
0 False False
1 False False
2 False False
3 True False
4 False False
5 False False
6 False True
7 False False
8 False False
9 False False
10 True False
11 False False
12 False False
我想創建一個帶有布林值的新列“C”,每次B打開時打開(=True),每次A打開時打開(例如:在索引6到索引10之間)
例如:對于這個 df,輸出將是:
A B C
0 False False False
1 False False False
2 False False False
3 True False False
4 False False False
5 False False False
6 False True True
7 False False True
8 False False True
9 False False True
10 True False True
11 False False False
12 False False False
我用 for 回圈和“開關”撰寫了這段代碼,但我很確定會有更快、更簡單的解決方案來為大型資料幀做同樣的事情。我感謝您的幫助。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [False,False,False,True,False,False,False,False,False,False,True,False,False],
'B': [False,False,False,False,False,False,True,False,False,False,False,False,False]
})
df["C"]=0
switch=False
for i in df.index :
if df.B.iloc[i]:
switch=True
if switch:
df.C.iloc[i]=True
else:
df.C.iloc[i]=False
if df.A.iloc[i]:
switch=False
print(df)
uj5u.com熱心網友回復:
使用填充的替代方法
df.loc[df['A'],'C'] = False
df.loc[df['B'],'C'] = True
df['C'] = df['C'].ffill().fillna(False) #start "off"
uj5u.com熱心網友回復:
合并兩列,減1,過濾掉負數和偶數:
x = (df['A'] | df['B']).cumsum().sub(1)
df['C'] = (x >= 0) & (x % 2 == 1)
輸出:
>>> df
A B C
0 False False False
1 False False False
2 False False False
3 True False False
4 False False False
5 False False False
6 False True True <
7 False False True <
8 False False True <
9 False False True <
10 True False False
11 False False False
12 False False False
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486106.html
