簡體   English   中英

標記 Dataframe 中具有不同字符串的列是否存在於另一列中

[英]Flag if a column in Dataframe with different strings exist in another column

我有一個數據框:

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

我需要標記每行的Number列中是否存在任何Items值。

輸出應該是:

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 ,而不僅僅是整體檢查。

我會使用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成長。 根據數據的結構方式,您可能需要重新考慮數據結構的設計。

我們可以用

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

我們可以用isinsplit

df.Items.str.split(',', expand=True).isin(df.Number.astype(str)).any(1)
0     True
1     True
2    False
3    False
dtype: bool

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM