我是 Python 和 Pandas 的新手。我有一个具有以下结构的数据集。这是一只 Pandas DF
city time1 time2
a [1991, 1992, 1993] [1993,1994,1995]
time1 和 time2 表示两个来源中数据的覆盖范围。我想创建一个新列,指示 time1 和 time2 是否有任何交集,如果有则返回 True 否则返回 False。任务听起来很简单。我正在考虑在两列上使用 set 操作,但它没有按预期工作。有人能帮我解决这个问题吗?
谢谢!
我感谢您的帮助。
最佳答案
您可以遍历所有列并将列表更改为集合,并查看交集中是否有任何值。
df1 = df.applymap(lambda x: set(x) if type(x) == list else set([x]))
df1.apply(lambda x: bool(x.time1 & x.time2), axis=1)
这是一种半矢量化的方式,应该使它运行得更快。
df1 = df[['time1', 'time2']].applymap(lambda x: set(x) if type(x) == list else set([x]))
(df1.time1.values & df1.time2.values).astype(bool)
甚至更快一点
change_to_set = lambda x: set(x) if type(x) == list else set([x])
time1_set = df.time1.map(change_to_set).values
time2_set = df.time2.map(change_to_set).values
(time1_set & time2_set).astype(bool)
关于python-3.x - Pandas:检查一列是否存在于另一列中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44789003/