猿问

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

是否可以使用 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]}


杨__羊羊
浏览 135回答 2
2回答

翻阅古今

利用:#changed sample data for possible non 1 before first 1 occurencedf = 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    141     0Name: X, dtype: int64最后得到最小值和最大值:min1 = s.min()max1 = s.max()print (min1)0print (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)

POPMUISE

它将遍历所有值并打印的最小值和最大值。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}")
随时随地看视频慕课网APP

相关分类

Python
我要回答