gpt4 book ai didi

python - 在多列中使用 isin

转载 作者:太空宇宙 更新时间:2023-11-03 20:34:07 26 4
gpt4 key购买 nike

我正在尝试将 .isin 与 ~ 一起使用,这样我就可以根据 2 个数据集中的多列获取唯一行的列表。

所以,我有 2 个 9 行的数据集:df1 是底部,df2 是顶部(抱歉,但我无法让它在下面同时显示,它显示 1,然后是一行数字)

   Index    Serial  Count   Churn
1 9 5 0
2 8 6 0
3 10 2 1
4 7 4 2
5 7 9 2
6 10 2 2
7 2 9 1
8 9 8 3
9 4 3 5


Index Serial Count Churn
1 10 2 1
2 10 2 1
3 9 3 0
4 8 6 0
5 9 8 0
6 1 9 1
7 10 3 1
8 6 7 1
9 4 8 0

我想根据超过 1 列从 df1 获取不在 df2 中的行列表。

例如,如果我基于 Serial 和 Count 列进行搜索,则不会从 df1 中获取索引 1 和 2,因为它出现在 df2 中的索引位置 6 处,与 df1 中的索引位置 4 相同,因为它出现在df2 中的索引位置 2。这同样适用于 df1 中的索引位置 5,因为它位于 df2 中的索引位置 8。

流失率列并不重要。

我可以让它工作,但仅基于 1 列,但不能基于超过 1 列。

df2[~df2.Serial.isin(df1.Serial.values)] 有点符合我的要求,但只在 1 列上。我希望它基于 2 个或更多。

  Index Serial  Count   Churn
3 9 3 0
6 1 9 1
7 10 3 1
8 6 7 1
9 4 8 0

最佳答案

一种解决方案是与指标合并:

df1 = pd.DataFrame([[10, 2, 0], [9, 4, 1], [9, 8, 1], [8, 6, 1], [9, 8, 1], [1, 9, 1], [10, 3, 1], [6, 7, 1], [4, 8, 1]], columns=['Serial', 'Count', 'Churn'])
df2 = pd.DataFrame([[9, 5, 1], [8, 6, 1], [10, 2, 1], [7, 4, 1], [7, 9, 1], [10, 2, 1], [2, 9, 1], [9, 8, 1], [4, 3, 1]], columns=['Serial', 'Count', 'Churn'])
# merge with indicator on
df_temp = df1.merge(df2[['Serial', 'Count']].drop_duplicates(), on=['Serial', 'Count'], how='left', indicator=True)
res = df_temp.loc[df_temp['_merge'] == 'left_only'].drop('_merge', axis=1)

Output
Serial Count Churn
1 9 4 1
5 1 9 1
6 10 3 1
7 6 7 1
8 4 8 1

关于python - 在多列中使用 isin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57291059/

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