如果Dataframe中的一列在另一列中存在具有不同字符串的标记

问题描述 投票:1回答:3

我有一个数据框:

Number   Items
 1        1,3,7
 2        1,2,7
 3        4,5
 4        9

我需要标记每行的Items列中是否存在Number值。

输出应为:

Number   Items      Flag
 1        1,3,7      True
 2        1,2,7      True  
 3        4,5        False
 4        9          False

我尝试过的是:df['Flag'] = df.items.isin(df.Number)

[Items列中只有一个值时有效。我需要考虑多个值,以便1,3,7可以单独检查而不是整体检查。

python pandas dataframe flags
3个回答
1
投票

我们可以使用

df['Flag'] = df.apply(lambda x: str(x['Number']) in x['Items'],axis = 1)

df['Flag'] = df['Items'].str.split(',').explode().eq(df['Number'].astype(str)).any(level = 0)

输出

   Number  Items   Flag
0       1  1,3,7   True
1       2  1,2,7   True
2       3    4,5  False
3       4      9  False

1
投票

我将使用zip和列表理解

df['Flag'] = [str(num) in lis for num, lis in zip(df.Number, df.Items)]

   Number  Items   Flag
0       1  1,3,7   True
1       2  1,2,7   True
2       3    4,5  False
3       4      9  False

[注意,他是O(N*max(I))操作,随着N行数的增加和列表大小I的增加,它可能变得非常慢。根据数据的结构,您可能需要重新考虑数据结构的设计。


1
投票

我们可以用splitisin

df.Items.str.split(',', expand=True).isin(df.Number.astype(str)).any(1)
0     True
1     True
2    False
3    False
dtype: bool
© www.soinside.com 2019 - 2024. All rights reserved.