【问题标题】:Plot different occurrences per date绘制每个日期的不同事件
【发布时间】:2021-10-27 15:04:06
【问题描述】:

我有一个包含许多列的数据集,其中两个是:

Type of vaccine Date
A 01-01-2021
A 01-01-2021
B 01-01-2021
C 02-01-2021
B 02-01-2021
D 03-01-2021
E 04-01-2021
... ...

我想绘制一个折线图,显示每种类型的疫苗以及每个日期的数量。

我有这样的情节 plot2 = df.value_counts('vacina_dataaplicacao').sort_values().plot(kind='line', cmap='plasma') 但它只显示一行和每个日期的总数。我需要把它分开,每种疫苗都有一行。

【问题讨论】:

  • 务必将'Date'列转换为datetime dtypedf.Date = pd.to_datetime(df.Date).dt.date,然后使用seaborn.catplot:sns.catplot(data=df, y='Date', hue='Type of vaccine', kind='count', height=6, aspect=1)
  • 这是离散数据,pd.crosstab(df.Date, df['Type of vaccine']).plot(figsize=(12, 5)) 难以阅读。
  • 没有 seaborn 的条形图版本:pd.crosstab(df.Date, df['Type of vaccine']).plot(figsize=(12, 5), kind='bar')

标签: python pandas dataframe matplotlib data-science


【解决方案1】:

你可以在一行中完成:

pd.crosstab(pd.to_datetime(df['Date']), df['Type of vaccine']).cumsum().plot()

感谢@TrentonMcKinney 使用pd.crosstab的想法!

最初,我使用基本的groupby

df = df.assign(Date=pd.to_datetime(df['Date']))
tally = df.groupby(['Date', 'Type of vaccine']).size().unstack(fill_value=0)

tally.cumsum().plot()

【讨论】:

  • 很好地添加了.cumsum
  • 最初我选择groupbyunstack(请参阅更新的答案)。关于crosstab 的好提醒(我不经常使用它)。
  • pivot 用于在您需要没有聚合的宽数据帧时进行绘图,pivot_table 用于相同但具有聚合的情况,crosstab 用于当您想要 pivot_table 但聚合时值也是列(通常当您只有 2 列而不是至少 3 列时)。
猜你喜欢
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多