gpt4 book ai didi

python - 在 Pandas Dataframe 的排序列中查找缺失的数字

转载 作者:行者123 更新时间:2023-12-03 23:40:03 24 4
gpt4 key购买 nike

我在下面有这个数据框,我想检测每个主题的缺失访问,如何按主题对访问进行排序并仅提取具有缺失值的记录?请检查所需的两种类型的输出。
第 1 部分:因此,根据所有科目的“访问”列中的最高数字,需要显示所有科目的缺失记录:

    Subject  Visit      X1      X2
A 1 1647143 1672244
A 2 1672244 1689707
A 4 1689707 1713090
B 1 1735352 1760283
B 2 1760283 1788062
B 7 1788062 1789885
B 9 1789885 1790728
输出将是:
    Subject  Visit      X1      X2
A 3 1647143 1672244
A 5 1672244 1689707
A 6 1689707 1713090
A 7 1647143 1672244
A 8 1672244 1689707
A 9 1689707 1713090
B 3 1735352 1760283
B 4 1760283 1788062
B 5 1788062 1789885
B 6 1789885 1790728
B 8 1789885 1790728
第 2 部分:因此,根据访问顺序中每个特定主题缺失记录的“访问”列中的最高数字需要显示:
示例输出:
    Subject  Visit      X1      X2
A 3 1647143 1672244
B 3 1735352 1760283
B 4 1760283 1788062
B 5 1788062 1789885
B 6 1789885 1790728
B 8 1789885 1790728

最佳答案

您找到每个主题的缺失访问次数,其中每个主题的最大访问次数是 Visit 的最大值。列,您可以创建所有可能的集合 (subject, visit)对,然后对观察到的对进行差分。

from itertools import product

all_pairs = set(product(sorted(set(df.Subject)), range(1, df.Visit.max()+1)))
observed_pairs = set(tuple(x) for x in df[['Subject', 'Visit']].to_numpy())

# create a data frame from the missing pairs
pd.DataFrame(sorted(all_pairs.difference(observed_pairs)), columns=['Subject', 'Visit'])
# returns:
Subject Visit
0 A 3
1 A 5
2 A 6
3 A 7
4 A 8
5 A 9
6 B 3
7 B 4
8 B 5
9 B 6
10 B 8
在每个主题的最大访问范围内查找缺失的访问。您可以执行以下操作:
def missing_visits(s):
all_v = set(range(1, s.max()+1))
obs_v = set(s)
return sorted(all_v.difference(obs_v))


df.groupby('Subject')['Visit'].apply(missing_visits).explode()
# returns:
Subject
A 3
B 3
B 4
B 5
B 6
B 8

关于python - 在 Pandas Dataframe 的排序列中查找缺失的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66323030/

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