[英]Min and Max frequency using pandas?
是否可以使用熊貓找到最小和最大頻率? 我有一系列值,我想知道它出現的最小和最大頻率。 以 1 為例,它在 24 次計數中出現了 3 次。 因此,平均頻率為 3/24 或 1/8。 可以通過 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.