猿问

如果 df 中的列的值是同一数据帧中另一列的值之一,则匹配

df


col1  col2

A      a|x|y

B      a|x|y

C      c|x|z

D      e|j|y

我的目标是创建一个名为“status”的新列,以查看 col1 中的条目是否是 col2 中的条目之一(由管道分隔)。输出应该是这样的


col1  col2     status

A      a|x|y   True

B      a|x|y   False

C      c|x|z   True

D      e|j|y   False

我的代码:


df["col1"]= df["col1"].str.lower()

df['status']=df['col1'].isin(df['col2']) 

但这将“状态”列中的所有条目都设为 False


请帮我解决这个问题,拜托!!!


慕无忌1623718
浏览 146回答 3
3回答

慕斯王

与此答案类似,您可以使用列表理解。假设您的数据是干净的,例如没有空值。zipper = zip(df['col1'], df['col2'])df['status'] = [i.casefold() in j.casefold().split('|') for i, j in zipper]print(df)  col1   col2 status0    A  a|x|y   True1    B  a|x|y  False2    C  c|x|z   True3    D  e|j|y  False

www说

也许您应该首先将数据框转换为更易于使用的格式。我建议这样的事情:>>> df = pd.concat([df['col1'], df['col2'].str.upper().str.split('|', expand=True)], axis=1)                                                                                                             >>> df                                                                                                                                                                                                     col1  0  1  20    A  A  X  Y1    B  A  X  Y2    C  C  X  Z3    D  E  J  Y现在你可以这样做:>>> df['status'] = df.apply(lambda s: s.duplicated().any(), axis=1)                                                                                                                                     >>> df                                                                                                                                                                                                      col1  0  1  2  status0    A  A  X  Y    True1    B  A  X  Y   False2    C  C  X  Z    True3    D  E  J  Y   False此解决方案假定您分隔的状态指示器'|'是唯一的,即您不能拥有类似'x|x|x'.如果您不喜欢该建议,请考虑:>>> df['status'] = df.apply(lambda row: row[0].lower() in row[1].split('|'), axis=1)                                                                                                                     >>> df                                                                                                                                                                                                     col1   col2  status0    A  a|x|y    True1    B  a|x|y   False2    C  c|x|z    True3    D  e|j|y   False
随时随地看视频慕课网APP

相关分类

Python
我要回答