计算每天的推文
Posted
技术标签:
【中文标题】计算每天的推文【英文标题】: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_df
是def
中的参数吗?
【参考方案1】:
您可以在此处使用DataFrame.groupby
和pd.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
【讨论】:
以上是关于计算每天的推文的主要内容,如果未能解决你的问题,请参考以下文章
将 Twitter 时间转换为特定格式的日期时间,以计算一天的推文频率