gpt4 book ai didi

python - 使用 pandas 的最小和最大频率?

转载 作者:行者123 更新时间:2023-12-01 00:07:46 24 4
gpt4 key购买 nike

是否可以使用 pandas 找到最小和最大频率?我有一系列值,我想知道它出现的最小和最大频率。以 1 为例,它在 24 次计数中出现了 3 次。因此,平均频率为 3/24 或 1/8。可以通过计数 1/总数得出。

但是,我正在寻找的是找到 1 的最小值和最大值:

  • min: 0(第一个 1 和第二个 1 之间出现其他值的次数)
  • max:14(第二个 1 和第三个 1 之间出现其他值的次数)

示例 DF:

╔════╗║ X  ║╠════╣║  1 ║║  1 ║║  8 ║║  5 ║║  8 ║║ 11 ║║  7 ║║ 11 ║║ 12 ║║  7 ║║  2 ║║  2 ║║  6 ║║  7 ║║  9 ║║  2 ║║  1 ║║  3 ║║ 10 ║║  2 ║║ 10 ║║ 13 ║║  4 ║║  6 ║╚════╝
data = {'X':[1,1,8,5,8,11,7,11,12,7,2,2,6,7,9,2,1,3,10,2,10,13,4,6]}

非常感谢

最佳答案

用途:

#changed sample data for possible non 1 before first 1 occurence
df = pd.DataFrame(data = {'X':[5,8,1,1,8,5,8,11,7,11,12,7,2,2,6,7,9,2,1,3,10,2,10,13,4,6]})
#print (df)

您可以通过 Series.eq 来比较值并通过Series.cumsum创建组,通过 Series.isin 删除带有 0 的组(如果第一个 1 之前存在一些值)和最后一个组(如果列的最后一个值为 1 也有必要删除)。使用 ~ 反转掩码,然后使用 Series.value_counts减去1:

s = df['X'].eq(1).cumsum()
s = s[~s.isin([0, s.max()])].value_counts().sub(1)
print (s)
2 14
1 0
Name: X, dtype: int64

最后得到最小值和最大值:

min1 = s.min()
max1 = s.max()
print (min1)
0
print (max1)
14

编辑:

如果还需要在第一个 1 之前进行分组,则使用:

s = df['X'].eq(1).cumsum().value_counts().sort_index().iloc[:-1].sub(1)
print (s)

min1 = s.min()
max1 = s.max()
print (min1)
print (max1)

关于python - 使用 pandas 的最小和最大频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59835767/

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