【问题标题】:Calculate Tweets Per day计算每天的推文
【发布时间】:2020-11-16 01:20:52
【问题描述】:

我需要编写一个函数来计算每天发布的推文数量。

功能规格:

  • 它应该采用 pandas 数据框作为输入。 它应该返回一个按天分组的新数据框,其中包含当天的推文数量。
  • 新数据框的索引应命名为日期,新数据框的列应为“推文”,分别对应推文的日期和数量。
  • 日期的格式应为 yyyy-mm-dd,并且应为日期时间对象。

我的代码是:


def number_of_tweets_per_day(df):
    
    df = pd.DataFrame(twitter_df['Date','Tweets'], columns =['Date', 'Tweets'])
    
    df['Date'] = pd.to_datetime(df['Date'], format = '%Y%m%d')
    df['Tweets'] = df['Tweets'].astype(str)
    
    grouped = pd.df.groupby(['Date'],['Tweets'])
    final = pd.df.count()
    
    
    
    return final

但是,当我尝试运行命令“number_of_tweets_per_day(twitter_df.copy())”时,我收到一条错误消息,提示未定义 twitter_df。

DF

预期输出

附加到输入数据帧图像和预期输出图像的链接。

我做错了什么?

【问题讨论】:

  • 应该twitter_dfdef 中的参数吗?

标签: python pandas dataframe pandas-groupby data-science


【解决方案1】:

您可以在此处使用DataFrame.groupbypd.Series.dt.date 进行分组并使用GroupBy.count

def tweets_per_day(df):
    df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d')
    return df[['Tweets']].groupby(df['Date'].dt.date).count()
  # return df['Tweets'].groupby(df['Date'].dt.date).count() 
  # if you want output to be `Series`

tweets_per_day(twitter_df)

虚拟 df 上的输出:

d = pd.to_datetime(['2019-11-29', '2019-11-30']).repeat(10)
df = pd.DataFrame({'Tweets':'anything', 'Date':d})
df
#      Tweets       Date
#0   anything 2019-11-29
#1   anything 2019-11-30
#2   anything 2019-11-29
#3   anything 2019-11-30
#4   anything 2019-11-29
#5   anything 2019-11-30
#6   anything 2019-11-29
#7   anything 2019-11-30
#8   anything 2019-11-29
#9   anything 2019-11-30
#10  anything 2019-11-29
#11  anything 2019-11-30
#12  anything 2019-11-29
#13  anything 2019-11-30
#14  anything 2019-11-29
#15  anything 2019-11-30
#16  anything 2019-11-29
#17  anything 2019-11-30
#18  anything 2019-11-29
#19  anything 2019-11-30

tweets_per_day(df)

            Tweets
Date
2019-11-29      10
2019-11-30      10

【讨论】:

    【解决方案2】:

    @Ch3steR 演示的groupby() 技术确实有效。这里有另外两种方法,使用value_counts()resample()

    创建数据框(并设置数据类型):

    import pandas as pd
    
    df = pd.DataFrame({'Date':  ['2019-11-30'] * 5 + ['2019-11-29'] * 6,
                       'Tweets': 'x'}
                     )
    df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')
    

    value_counts() 方法:

    def tweets_per_day_2(df):
        return df['Date'].value_counts().sort_index()
    
    result = tweets_per_day_2(df)
    print(result)
    
    2019-11-29    6
    2019-11-30    5
    Name: Date, dtype: int64
    

    还有resample() 方法:

    def tweets_per_day_3(df):
        return df.set_index('Date').resample('D').count().sort_index()
    
    result = tweets_per_day_3(df)
    print(result)
    
                Tweets
    Date              
    2019-11-29       6
    2019-11-30       5
    

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2020-06-09
      • 2017-06-24
      相关资源
      最近更新 更多