如何根据Python中另一列中的日期查找最频繁的值
Posted
技术标签:
【中文标题】如何根据Python中另一列中的日期查找最频繁的值【英文标题】:How to find the most frequent value based on dates in another column in Python 【发布时间】:2022-01-22 05:06:11 【问题描述】:我想找出在给定日期出现 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']
# Create DataFrame
df = pd.DataFrame(data)
# Print the output.
print(df)
Name | Date |
---|---|
A | 06/21 |
B | 06/21 |
A | 06/21 |
C | 06/21 |
C | 06/21 |
A | 06/21 |
B | 06/21 |
A | 06/22 |
B | 06/22 |
B | 06/22 |
B | 06/22 |
C | 06/22 |
C | 06/22 |
【问题讨论】:
【参考方案1】:您可以使用value_counts
和 normalize 来计算相对值,然后过滤:
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
【讨论】:
【参考方案2】:问题总结:
输入:给定日期 输出:Name 列中值大于 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
dates_to_use=[<put all dates to use>]
df=df[df.date.isin(dates_to_use)==False]
如果您只想使用一些选定的日期,请按照作者在 cmets 中的要求执行此操作
【讨论】:
我更新了答案以上是关于如何根据Python中另一列中的日期查找最频繁的值的主要内容,如果未能解决你的问题,请参考以下文章