假设我有这样的DF:
Range = np.arange(0,10,1) Table = pd.DataFrame({"Row": Range})
现在我想添加两个新的列,这两个列是基于彼此的-例如-
Table["A"]=np.where(Table["B"].shift(1)>0,1,0) Table["B"]=np.where(Table["A"]==1,1,0)
例如,在Excel中,一圈无效数据不会产生错误,我想知道在Python中,df是否可能出现这种情况。谢谢。
bis0qfac1#
你可以尝试一种迭代方法,将B初始化为某个值(例如,所有项都等于None、1、0,或者其他初始化模式),按照你的问题设置A,然后循环并更新A和B,直到每个项都收敛或者达到最大迭代阈值:
B
None
1
0
A
import pandas as pd import numpy as np Range = np.arange(0,4,1) Table = pd.DataFrame({"Row": Range}) print(Table) for pair in [(np.nan, np.nan), (None, None), (0,0),(0,1),(1,0),(1,1)]: print(f'\npair is {pair}') Table["B"] = np.where(Table["Row"] % 2, pair[0], pair[1]) Table["A"] = np.where(Table["B"].shift(1) > 0, 1, 0) i = 0 prevA, prevB = None, None while prevA is None or not prevB.equals(Table["B"]) or not prevA.equals(Table["A"]): if i >= 20: print('max iterations exceeded') break print(f'iteration {i}') print(Table) i += 1 prevA, prevB = Table["A"].copy(), Table["B"].copy() Table["A"] = np.where(Table["B"].shift(1) > 0, 1, 0) Table["B"] = np.where(Table["A"] == 1, 1, 0)
注意,对于OP中的示例逻辑,对于B的一些初始化模式,这似乎确实收敛(至少使用长度为4的较短输入数组时确实收敛)。样本输出:
pair is (nan, nan) iteration 0 Row B A 0 0 NaN 0 1 1 NaN 0 2 2 NaN 0 3 3 NaN 0 iteration 1 Row B A 0 0 0 0 1 1 0 0 2 2 0 0 3 3 0 0 pair is (None, None) iteration 0 Row B A 0 0 None 0 1 1 None 0 2 2 None 0 3 3 None 0 iteration 1 Row B A 0 0 0 0 1 1 0 0 2 2 0 0 3 3 0 0 pair is (0, 0) iteration 0 Row B A 0 0 0 0 1 1 0 0 2 2 0 0 3 3 0 0 pair is (0, 1) iteration 0 Row B A 0 0 1 0 1 1 0 1 2 2 1 0 3 3 0 1 iteration 1 Row B A 0 0 0 0 1 1 1 1 2 2 0 0 3 3 1 1 iteration 2 Row B A 0 0 0 0 1 1 0 0 2 2 1 1 3 3 0 0 iteration 3 Row B A 0 0 0 0 1 1 0 0 2 2 0 0 3 3 1 1 iteration 4 Row B A 0 0 0 0 1 1 0 0 2 2 0 0 3 3 0 0 pair is (1, 0) iteration 0 Row B A 0 0 0 0 1 1 1 0 2 2 0 1 3 3 1 0 iteration 1 Row B A 0 0 0 0 1 1 0 0 2 2 1 1 3 3 0 0 iteration 2 Row B A 0 0 0 0 1 1 0 0 2 2 0 0 3 3 1 1 iteration 3 Row B A 0 0 0 0 1 1 0 0 2 2 0 0 3 3 0 0 pair is (1, 1) iteration 0 Row B A 0 0 1 0 1 1 1 1 2 2 1 1 3 3 1 1 iteration 1 Row B A 0 0 0 0 1 1 1 1 2 2 1 1 3 3 1 1 iteration 2 Row B A 0 0 0 0 1 1 0 0 2 2 1 1 3 3 1 1 iteration 3 Row B A 0 0 0 0 1 1 0 0 2 2 0 0 3 3 1 1 iteration 4 Row B A 0 0 0 0 1 1 0 0 2 2 0 0 3 3 0 0
1条答案
按热度按时间bis0qfac1#
你可以尝试一种迭代方法,将
B
初始化为某个值(例如,所有项都等于None
、1
、0
,或者其他初始化模式),按照你的问题设置A
,然后循环并更新A
和B
,直到每个项都收敛或者达到最大迭代阈值:注意,对于OP中的示例逻辑,对于
B
的一些初始化模式,这似乎确实收敛(至少使用长度为4的较短输入数组时确实收敛)。样本输出: