迭代一个列表以显示重复项和这些重复项的增量



学习python和熊猫,不确定我是否还有这个能力,但我发现python编程很吸引人。真希望我60年前就开始了。我要完成的任务是这样的。我有一个随机重复数字的列表。我要做的是先计算重复项的个数然后找出重复项的函数。这是我的目标的基本布局。

1                    numbers    total    first-occurence   Delta_1
9                      0          2            5             4
1                      1          2            1             2
3                      2          1            9
0                      3          3            4             2
3                      4          0
6                      5          0
0                      6
2                      7
0                      8
9

分析将是右侧的列,我希望它是一个具有9行和尽可能多的列的数据框架,因为有重复。我发现了许多方法来提出重复计数,这不是一个问题,但确定delta是什么,并填充数据框列是。我希望我已经足够清楚地解释了我的目标,以便任何可能愿意帮助的善良的灵魂都不会感到困惑。

不知道从哪里开始delta频率。如有任何意见或建议,我将不胜感激。

作为解决问题的一般方法,你应该试着把你的问题分解成更小的可解决的块,以便更好地理解它。

解决这个问题的一个很好的起点如下

import pandas as pd
import numpy as np
random_nums = np.array([1, 9, 1, 3, 0, 3, 6, 0, 2, 0])
df = pd.DataFrame({"numbers": range(min(random_nums), max(random_nums) + 1)})
df["total"] = df["numbers"].map(lambda x: np.count_nonzero(random_nums == x))
df["first_occurrence"] = df["numbers"].map(lambda x: np.argmax(random_nums == x))
df["delta"] = np.nan
# Delta only makes sense if the number of duplicates are atleast 2
df.loc[df.total >= 2, "delta"] = df.loc[df.total >= 2, "numbers"].map(
lambda x: np.ptp(np.where(random_nums == x))  # Peak to peak difference of indices
)
print(df)

输出
numbers  total  first_occurrence  delta
0        0      3                 4    5.0
1        1      2                 0    2.0
2        2      1                 8    NaN
3        3      2                 3    2.0
4        4      0                 0    NaN
5        5      0                 0    NaN
6        6      1                 6    NaN
7        7      0                 0    NaN
8        8      0                 0    NaN
9        9      1                 1    NaN

最新更新