如何解决绘制日期时间系列,计算另一个系列的值
我陷入了密谋问题。在寻求帮助之前,我已经做了一些研究。
我有一个看起来像这样的数据框:
date text
2020-08-18 hey what's up?
2020-08-18 all good here
2020-08-17 happy Monday
2020-08-17 no news good news
2020-08-17 it's been a while
2020-08-16 see you tomorrow
长话短说,我正在尝试绘制垂直条形图或折线图,其中['date']为我的x,[COUNT] [text]]为我的y。 2020-08-18有2个条目,2020-08-17有3个条目,2020-08-16有1个条目。
使用SQL,我只需要做类似的事情:
SELECT date,COUNT(date) AS count_date FROM my_table GROUP BY date
使用Python我已经使事情变得复杂了,
df['date_count'] = df.groupby(['date'])['date'].transform('size')
df_temporary = df.loc[ :,['date','date_count'] ].drop_duplicates()
然后我就可以画出其中的全部内容:
sns.plotline(data=df_temporary,x='date',y='date_count')
或其等效的Matplotlib:
plt.line(df_temporary.date,df_temporary.date_count)
它有效,但是我的意思是,它不会那么复杂,对吧?
我没看到什么明显的东西?如何获得每个唯一日期的COUNT?
解决方法
最简单的是:
ax = df.groupby('date').size().plot(kind='bar')
这会给您一个非常简单的图表,您可以根据自己的喜好对其进行自定义:
,您可以创建一个临时数据框,以计算每个日期的统一日期。
temp['date_count'] = df.groupby(['date'])['date'].nunique().reset_index()
然后用它来绘制图表
sns.plotline(data=temp,x='date',y='date_count')
,
您确实很接近,语法实际上非常类似于SQL
密钥为df.groupby(key to group by)[target column for agg function].count()
import matplotlib.pyplot as plt
from io import StringIO
d = """date text
2020-08-18 hey what's up?
2020-08-18 all good here
2020-08-17 happy Monday
2020-08-17 no news good news
2020-08-17 it's been a while
2020-08-16 see you tomorrow"""
df = pd.read_csv(StringIO(d),sep='\s\s+',parse_dates=['date'])
df.groupby('date')['date'].count().plot(kind='line',title='Count of Text by Date'
)
,
是的,您是正确的。所有这些事情都可以在一行中完成。
plt.plot(df.groupby("date").apply(len))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。