如何解决如何使用两个DF1列在DF2上创建新列
我有两个具有不同数据的数据帧,我需要根据在DF1的两列中获得的信息在DF2上添加一个新列。在下面的示例中,我需要检查两个DF中具有相同城市和DOB值的所有条目,并在DF1中添加一个新列,说是或否。
DF1:
City DOB Gender Test
NYC 01/05/1990 F Positive
NYC 01/06/1991 M Negative
LA 12/01/1980 F Negative
BOS 11/11/1987 M Positive
DF2:
City DOB Gender
NYC 01/05/1990 F
NYC 04/22/1980 M
LA 12/01/1980 F
BOS 07/18/1984 M
所以我的输出是:
DF1'
City DOB Gender Test New_column
NYC 01/05/1990 F Positive YES
NYC 01/06/1991 M Negative NO
LA 12/01/1980 F Negative YES
BOS 11/11/1987 M Positive NO
我得到的最接近的代码是下面的代码,但是它仅在DF1列中搜索,而在另一列中不搜索(在我的情况下,它在具有相同DOB的所有条目中添加YES)。
df1.loc[(df1.City.isin(df2.City))&(df1.DOB.isin(df2.DOB)),'New_column'] = "YES"
有什么办法可以对付熊猫吗?我有一个非常大的数据集,这段代码将为我节省一些时间。
解决方法
您可以使用numpy.where
import numpy as np
rule = (df1["City"] == df2["City"]) & (df1["DOB"] == df2["DOB"])
df1["new_column"] = np.where(rule,"YES","NO")
print(df1)
City DOB Gender Test new_column
0 NYC 01/05/1990 F Positive YES
1 NYC 01/06/1991 M Negative NO
2 LA 12/01/1980 F Negative YES
3 BOS 11/11/1987 M Positive NO
,
不确定数据的大小或数据的局限性,以及使用以下内容的解决方案:
df3 = (
df2.set_index(["City","DOB"])
.join(
df1.set_index(["City","DOB"])
.drop("Gender",axis="columns")
.assign(
new_column=list(
itertools.islice(itertools.cycle(["yes","no"]),df1.shape[0])
)
)
)
.reset_index()
)
哪个输出:
City DOB Gender Test new_column
0 NYC 01/05/1990 F Positive yes
1 NYC 04/22/1980 M NaN NaN
2 LA 12/01/1980 F Negative yes
3 BOS 07/18/1984 M NaN NaN
,
您可能会很有趣,可以直接比较这两列数据框的子集,然后将boolean
值的总和与等于2的条件相加。然后,将布尔值替换为{{1} }或Yes
。这种方法假定值的顺序和长度相同。
No
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。