我想找出哪個值出現在給定日期 50% 或更多的時間。例如,在下面的資料集中,A 在 06/21 出現的頻率最高,但它不會出現 50% 或更多的時間。在 06/22,B 出現的時間為 50% 或更多,因此我需要輸出來顯示“B”和日期“06/22”。
編輯:還有第三個條件。如果第三行顯示“已接受”,那么這些是唯一應該計算的值。在這種情況下,我會將它們全部接受,因為它是一個小樣本資料集。
import pandas as pd
# initialise data of lists.
data = {'Name':['A', 'B', 'A', 'C', 'C', 'A', 'B', 'A', 'B','B','B', 'C', 'C'], 'Date':
['06/21', '06/21', '06/21', '06/21', '06/21', '06/21', '06/21', '06/22' , '06/22', '06/22', '06/22', '06/22', '06/22'], 'Status':['Accepted','Accepted', 'Accepted', 'Accepted', 'Accepted', 'Accepted', 'Accepted', 'Accepted', 'Accepted', 'Accepted', 'Accepted', 'Accepted']}
# Create DataFrame
df = pd.DataFrame(data)
# Print the output.
print(df)
| 名稱 | 日期 | 地位 |
|---|---|---|
| 一個 | 06/21 | 公認 |
| 乙 | 06/21 | 公認 |
| 一個 | 06/21 | 公認 |
| C | 06/21 | 公認 |
| C | 06/21 | 公認 |
| 一個 | 06/21 | 公認 |
| 乙 | 06/21 | 公認 |
| 一個 | 06/22 | 公認 |
| 乙 | 06/22 | 公認 |
| 乙 | 06/22 | 公認 |
| 乙 | 06/22 | 公認 |
| C | 06/22 | 公認 |
| C | 06/22 | 公認 |
uj5u.com熱心網友回復:
您可以使用value_countsnormalize 來計算相對值,然后過濾:
s = df.groupby('Date')['Name'].value_counts(normalize=True).reset_index(name='freq')
s.query('freq >= 0.5')
輸出:
Date Name freq
3 06/22 B 0.5
uj5u.com熱心網友回復:
讓我們看看,問題摘要:-輸入-給定日期輸出名稱列中哪些值的頻率大于 50% 請告訴我這里是否有誤,
import numpy as np # If not downloaded run 'pip install numpy'
date=input('Enter your date ex:06/21')
#date='06/21'
def frequency(df,date):
dfcrop=df[df['Date']==date]#Crop the columns with given date
dfcrop=df[df['Accepted']==True]# As per condition
values=list()
for value in set(list(dfcrop['Name'])): # Take out all unique names
freq=np.sum((dfcrop['Name']==value).astype(np.int32))
freq=freq/dfcrop.shape[0]# Calculate frequency
if freq >=0.5: # frequency is greater than 50 percent
values.append(value)
return values
freq=frequency(df,date) # freq is a list with the names with a freq above 50 percent on given date
希望它作業愉快編碼^-^
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387628.html
