繁体   English   中英

通过比较行熊猫来创建新列

[英]Create a new column by comparing rows pandas

我的数据框看起来像这样

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

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

  • 如果“ a”的值相同(即第一行和第二行,第三行和第四行和第五行),请检查这些行的“ b”值是否相同。 (第二行返回True。第四行返回False)。
  • 如果“ a”的值不相同,请跳过。

我当前的代码如下:

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')

并返回错误。

我认为这是groupby

df.groupby('a').b.apply(lambda x : x==x.shift())
Out[431]: 
0    False
1     True
2    False
3    False
4    False
Name: b, dtype: bool

bitwise &应当执行:检查是否同时满足两个条件:

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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM