簡體   English   中英

使用熊貓的最小和最大頻率?

[英]Min and Max frequency using 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]}

非常感謝

用:

#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 ,取出基團與0 (如果存在befor第一1一些值)和最后一組(也有必要刪除,如果列的最后一個值是1 )通過Series.isin與通過~反轉掩碼,然后使用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)

這是@jezrael 的改進答案,它將遍歷所有值並打印的最小值和最大值。

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}")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM