[英]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
我們可以用isin
做split
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.