为了账号安全,请及时绑定邮箱和手机立即绑定

使用熊猫的最小和最大频率?

使用熊猫的最小和最大频率?

杨__羊羊 2022-07-05 15:41:34
是否可以使用 pandas 找到最小和最大频率?我有一系列值,我想知道它出现的最小和最大频率。以 1 为例,它在 24 个计数中出现了 3 次。因此,平均频率为 3/24 或 1/8。可以通过 1 / 总数得出。但是,我正在寻找的是找到 1 的最小值和最大值:min: 0(其他值出现在第一个 1 和第二个 1 之间的次数)最大值: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]}
查看完整描述

2 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

利用:


#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)

您可以比较值 bySeries.eq并创建组 by Series.cumsum,删除组0(如果在第一个 1 之前存在一些值)和最后一组(如果列的最后一个值是 ,则也必须删除1) bySeries.isin与反转掩码 by~然后使用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)


查看完整回答
反对 回复 2022-07-05
?
POPMUISE

TA贡献1765条经验 获得超5个赞

它将遍历所有值并打印的最小值和最大值。


df = pd.DataFrame(data = {'X':[1,5,8,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)

for i in set(df['X']):

    s = df['X'].eq(i).cumsum()

    s = s[~s.isin([0, s.max()])].value_counts().sub(1)

    min1 = s.min()

    max1 = s.max()

    if math.isnan(min1):

        min1=max1=0

    print(f"min for {i} is {min1}")

    print(f"max for {i} is {max1}")


查看完整回答
反对 回复 2022-07-05
  • 2 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号