首页 > 解决方案 > 通过比较行 pandas 创建一个新列

问题描述

我的数据框看起来像这样

df = pd.Dataframe({ 'a': ["10001", "10001", "10002", "10002" , "10002"], 'b': ['hello', 'hello', 'hola', 'hello', 'hola']})

我想创建一个具有以下条件的布尔值的新列“c”:

我当前的代码如下:

def check_consistency(col1,col2):
    df['match'] = df[col1].eq(df[col1].shift())
    t = []
    for i in df['match']:
        if i == True:
            t.append(df[col2].eq(df[col2].shift()))
check_consistency('a','b')

它返回错误。

标签: pythonpandasdataframestring-comparison

解决方案


Abitwise &应该做:检查两个条件是否都满足:

df['c'] = (df.a == df.a.shift()) & (df.b == df.b.shift()) 

df.c
#0    False
#1     True
#2    False
#3    False
#4    False
#Name: c, dtype: bool

或者,如果你想让你当前的代码工作,你可以做类似的事情(基本上做与上面相同的检查):

def check_consistency(col1,col2):
    df['match'] = df[col1].eq(df[col1].shift())

    for i in range(len(df['match'])):
        if (df['match'][i] == True):
            df.loc[i,'match'] = (df.loc[i, col2] == df.loc[i-1, col2])

check_consistency('a','b')

推荐阅读