gpt4 book ai didi

python - 在 pandas 中查找匹配的列,包括 NaN

转载 作者:行者123 更新时间:2023-12-01 02:22:20 25 4
gpt4 key购买 nike

我有一个关于 pandas 的非常具体的问题。我有两个 DataFrame,都是二进制的:一个包含多个要匹配的模式,可以说:

0 : 1,NaN,1,Nan,Nan  
1 : Nan,1,1,Nan,Nan

以及包含实际数据记录的一个

0 : 1,0,0,1,0  
1 : 0,0,0,0,1
2 : 1,0,1,0,0

我想要执行一个操作来告诉我记录数据的哪些行与哪些规则匹配。在示例中,规则 0 将匹配记录 2。缺失值不必匹配任何内容,这就是我的问题:如果没有任何缺失值,我可以简单地使用 pd.merge(df1,df2,how="inner") ,但内部联接与 NaN 不匹配与任何东西。

是否有一个简单优雅的解决方案,无需执行所有循环?

编辑以添加(为了清楚起见):

这个:

0 : 1,1,NaN,NaN,NaN

应与以下两者匹配:

0 : 1,1,0,0,0
1 : 1,1,0,0,1

最佳答案

如果是二进制,我们可以使用重复

df=pd.concat([df1.fillna(0),df2],keys=['df1','df2'])
df[df.astype(int).duplicated(keep=False)]
Out[37]:
1 2 3 4 5
df1 0 1.0 0.0 1 0.0 0.0
df2 2 1.0 0.0 1 0.0 0.0

编辑

dd=df1.stack().reset_index().groupby('level_0').level_1.apply(list).tolist()
dd
Out[67]: [['1', '3'], ['2', '3']]

df2.apply(lambda x : sum([all(x.loc[y]==1) for y in dd]),1 )

Out[78]:
0 0
1 0
2 1
dtype: int64
df2[df2.apply(lambda x : sum([all(x.loc[y]==1) for y in dd]),1 )==1]
Out[80]:
1 2 3 4 5
2 1 0 1 0 0

关于python - 在 pandas 中查找匹配的列,包括 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47847156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com