Pandas 真假匹配

Pandas True False Matching

为此table:

我想生成 'desired_output' 列。实现这一目标的一种方法可能是:

  1. col_1 中的所有真值都直接传输到 desired_output(红色箭头)
  2. 在 desired_output 中,将真值置于任何现有真值之上(绿色箭头)

我试过的代码:

df['desired_output']=df.col_1.apply(lambda x: True if x.shift()==True else False)

谢谢

您可以按 | 将按位 OR 原始值链接 Series.shift:

d = {"col1":[False,True,True,True,False,True,False,False,True,False,False,False]}
df = pd.DataFrame(d)

df['new'] = df.col1 | df.col1.shift(-1)
print (df)
     col1    new
0   False   True
1    True   True
2    True   True
3    True   True
4   False   True
5    True   True
6   False  False
7   False   True
8    True   True
9   False  False
10  False  False
11  False  False

试试这个

df['desired_output'] = df['col_1']
df.loc[1:, 'desired_output'] = df.col_1[1:].values | df.col_1[:-1].values
print(df)

以防那些被保存为字符串。 all_caps(真/假) 输入:

   col_1
0   True
1   True
2   False
3   True
4   True
5   False
6   Flase
7   True
8   False

代码:

df['desired']=df['col_1']
for i, e in enumerate(df['col_1']):
    if e=='True':
        df.at[i-1,'desired']=df.at[i,'col_1']
df = df[:(len(df)-1)]
df

输出:

   col_1    desired
0   True    True
1   True    True
2   False   True
3   True    True
4   True    True
5   False   False
6   Flase   True
7   True    True
8   False   False