如何根据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中另一列中的日期查找最频繁的值的主要内容,如果未能解决你的问题,请参考以下文章

我如何基于Awk中另一列中的值求和列中的值

如何根据bigquery中另一列中的重复值计算一列

如何计算包含一组列中的值和 Pandas 数据框中另一列中的另一个值的行数?

如果同一行中另一列中的值匹配,如何比较列的两个值

根据 Pandas 中另一列中的索引从列中获取数据

根据火花数据框中另一列的值查找列的最大值?