【问题标题】:Graphing rows with a date value within 50 days of a given value in pandas用pandas中给定值的50天内的日期值绘制行
【发布时间】:2017-04-20 00:34:11
【问题描述】:

我有一个带有日期列的 DataFrame (dataframeA),所有格式都像这样

日期
19960826
19960826
19970303
19970320
19970905

和一列值
价值观
100
35
11
37
...

和一列组
组K
组L
组M
...

给定另一个 DataFrame,dataframeB,它有两列:格式为 yyyymmdd 的日期和组。对于 dataframeB 中的每一行,我如何绘制每组日期前后 60 天内的值。

即如果 dataframeB 第一行是
20050101 M组

绘制(在 Y 轴上)dataframeA 中的值,其中日期在 2005 年 1 月 1 日之前或之后的 50 天内,组为 groupM。

【问题讨论】:

  • 使用样本数据会好很多。否则,我不会浪费时间编造一个例子。这就是我。其他人可能愿意提供帮助。如需帮助最大限度地提高您的问题得到回答的机会,请阅读MCVEHowToAsk
  • @piRSquared 我知道没有所有数据会使这变得更加困难,我试图尽可能地减少。甚至了解如何在给定日期的范围内获取行也会非常有帮助。我可以弄清楚图形和迭代,但真的很难过。

标签: python date pandas matplotlib graph


【解决方案1】:

以下是一些示例数据:

import pandas as pd
import numpy as np
import string

start_date = '20050101'
drange = pd.date_range(start_date, periods=100, freq='D')
possible_groups = ['A','B','C','D','E','F']
chosen = np.random.choice(possible_groups, len(drange), replace=True)
groups = pd.Series(chosen).apply(lambda x: 'group'+x)
values = np.random.randint(1, 100, len(drange))

dfA = pd.DataFrame({'date':drange, 'grp':groups, 'value':values})
dfB = pd.DataFrame({'date':drange, 'grp':groups})

注意:如果您需要让 datetime 对象在视觉上看起来像 YYYYMMDD,您可以使用 strftime() 并根据需要切换回 datetime,例如:

drange = pd.date_range(start_date, periods=100, freq='D').strftime('%Y%m%d')

现在,假设您出于某种原因需要将这些数据帧分开(即不允许使用merge()),以下应该可以工作。

def plot_range(data, within):
    (
     dfA.set_index('date')
        .loc[dfA.grp.values == data.grp]
        .loc[data.date-pd.Timedelta(days=within):
             data.date+pd.Timedelta(days=within)]
        .plot(title=data.grp)
    )

within = 50 # set within to the desired range in days around a date
dfB.apply(plot_range, axis='columns', args=(within,))

以下是几天子集的示例输出:

subset = 3
within = 10
dfB.sample(subset).apply(plot_range, axis='columns', args=(within,))  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多