如何在 pandas 数据框中以 monthly/weekly 为基础绘制日期
How to plot dates on a monthly/weekly basis in pandas dataframe
我有以下数据框:
Date Embedded_text Partei sentiment_prediction Sentiment
Date
2021-03-26 2021-03-26 AfD wirkt.\n\nSchluss mit dem #Gendergaga\nMDR... AfD 2 Neutral
2021-03-27 2021-03-27 Im Herbst wird gewählt.\nSchluss mit den Recht... AfD 1 Negative
2021-03-31 2021-03-31 Behördenwillkür\nFlüchtlingsheime durchgedrück... AfD 1 Negative
2021-04-01 2021-04-01 Aus Raider wird jetzt Twix \n\nLeider kein #Ap... AfD 2 Neutral
2021-04-01 2021-04-01 Gendern geht („*innen“)\nImpfen geht nicht.\nD... AfD 1 Negative
... ... ... ... ... ...
数据帧的时间范围从 01.01.2021 到 01.01.2022。现在我想随着时间的推移绘制不同的东西,例如:
- 随时间绘制“sentiment_prediction”
- 随时间绘制“sentiment_prediction”,按“Partei”分组
- 在一年中的所有月份或特定周内绘制上面的图
我已经选择“日期”作为索引。尝试绘制全年时,我得到以下输出:
df["sentiment_prediction"].plot()
如您所见,图中充满了数据点,因为该图中考虑了每一天。这就是为什么我只想绘制几个月或几周的时间以获得更有洞察力的情节。
目前,我不知道如何解决这个问题。
提前致谢!
您可以尝试在 X-axis 中使用不同的时间格式(如 MM-DD-YYYY),或者只获取每个月的平均值或中位数来绘制单个点。
only plot months or weeks
如果需要,请使用 DataFrame.resample
or Series.resample
to resample the frequency to M
(months) or W
(weeks). Just make sure the index is a true datetime
type (use pd.to_datetime
。
重采样前:
rng = np.random.default_rng(0)
df = pd.DataFrame({'Date': pd.date_range('2021-01-01', '2021-12-31'), 'Partei': rng.choice(list('abc'), size=365), 'sentiment_prediction': rng.integers(5, size=365)})
df = df.set_index('Date')
df['sentiment_prediction'].plot()
重采样后:
# resampled weekly
df['sentiment_prediction'].resample('W').mean().plot()
# resampled monthly
df['sentiment_prediction'].resample('M').mean().plot()
grouped by "Partei"
在绘图之前使用 DataFrame.pivot_table
将 Partei
转换为列:
(df.pivot_table(index='Date', columns='Partei', values='sentiment_prediction')
.resample('M').mean().plot())
我有以下数据框:
Date Embedded_text Partei sentiment_prediction Sentiment
Date
2021-03-26 2021-03-26 AfD wirkt.\n\nSchluss mit dem #Gendergaga\nMDR... AfD 2 Neutral
2021-03-27 2021-03-27 Im Herbst wird gewählt.\nSchluss mit den Recht... AfD 1 Negative
2021-03-31 2021-03-31 Behördenwillkür\nFlüchtlingsheime durchgedrück... AfD 1 Negative
2021-04-01 2021-04-01 Aus Raider wird jetzt Twix \n\nLeider kein #Ap... AfD 2 Neutral
2021-04-01 2021-04-01 Gendern geht („*innen“)\nImpfen geht nicht.\nD... AfD 1 Negative
... ... ... ... ... ...
数据帧的时间范围从 01.01.2021 到 01.01.2022。现在我想随着时间的推移绘制不同的东西,例如:
- 随时间绘制“sentiment_prediction”
- 随时间绘制“sentiment_prediction”,按“Partei”分组
- 在一年中的所有月份或特定周内绘制上面的图
我已经选择“日期”作为索引。尝试绘制全年时,我得到以下输出:
df["sentiment_prediction"].plot()
如您所见,图中充满了数据点,因为该图中考虑了每一天。这就是为什么我只想绘制几个月或几周的时间以获得更有洞察力的情节。 目前,我不知道如何解决这个问题。
提前致谢!
您可以尝试在 X-axis 中使用不同的时间格式(如 MM-DD-YYYY),或者只获取每个月的平均值或中位数来绘制单个点。
only plot months or weeks
如果需要,请使用 DataFrame.resample
or Series.resample
to resample the frequency to M
(months) or W
(weeks). Just make sure the index is a true datetime
type (use pd.to_datetime
。
重采样前:
rng = np.random.default_rng(0)
df = pd.DataFrame({'Date': pd.date_range('2021-01-01', '2021-12-31'), 'Partei': rng.choice(list('abc'), size=365), 'sentiment_prediction': rng.integers(5, size=365)})
df = df.set_index('Date')
df['sentiment_prediction'].plot()
重采样后:
# resampled weekly
df['sentiment_prediction'].resample('W').mean().plot()
# resampled monthly
df['sentiment_prediction'].resample('M').mean().plot()
grouped by "Partei"
在绘图之前使用 DataFrame.pivot_table
将 Partei
转换为列:
(df.pivot_table(index='Date', columns='Partei', values='sentiment_prediction')
.resample('M').mean().plot())