gpt4 book ai didi

python - Pandas 数据框按列比较 2 组的字符串值

转载 作者:行者123 更新时间:2023-11-28 17:55:53 25 4
gpt4 key购买 nike

我有一个看起来像这样的数据集-

ID        Search    Provider
1 Yes A
1 Yes B
1 No B
1 No C
2 Yes D
2 Yes A
2 Yes B
2 No B
2 No C

我想知道的是,对于给定 ID,Search==Yes 的 Provider 是否不同于 Search==No。例如-“ID 1”、“Search=No”转到提供商 B、C,而“Search=Yes”转到提供商 A、B。因此提供者 A 对于 ID 1 是新的。

我知道我可以使用 isin 函数来识别两个列表之间的唯一值。但是,如何跨越多行 ID 和 Search 执行此操作?以及如何将 Provider 值编译到由 ID 和 Search 定义的每个子组的列表中?我想我将需要使用嵌套循环但无法编写代码。如果有人可以帮助我,我将不胜感激。

最佳答案

与其编译成列表,不如考虑集合。从一般意义上讲,这可能更有用,因为我认为顺序和冗余无关紧要。此外,更容易确定哪些提供者属于一组而不是另一组。您可以使用 pivot_table 重新排列数据框以执行此操作:

df_new = df.pivot_table(index='ID', columns='Search', aggfunc=set).droplevel(0, axis=1)

结果:

Search      No        Yes
ID
1 {C, B} {A, B}
2 {C, B} {D, A, B}

有了这个新的数据框,您可以轻松地比较具有相同“ID”的值:

# df_new['No'] == df_new['Yes']   # If providers are the same between "yes" and "no"
df_new['Yes'] - df_new['No'] # Providers that are in "yes" but not "no"

结果(集差):

ID
1 {A}
2 {D, A}
dtype: object

关于python - Pandas 数据框按列比较 2 组的字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58512792/

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