Python 在特定时间段内针对特定Id在多个文件之间进行打印

Python 在特定时间段内针对特定Id在多个文件之间进行打印,python,python-3.x,Python,Python 3.x,我正试图绘制一个图来比较4个不同的文件。每个文件都有ID、日期和值。虽然ID和日期保持不变,但每个文件中的值都不同。现在我想为ID绘制一个值字段,比如说1月份的7天。结果将是四个不同文件中四个不同值的叠加图。我如何在python中实现这一点?我想让它尽可能自动化,而不需要几个手动步骤。谢谢你的帮助 下面的示例数据集 样本数据集1 ID日期值 A 01-01-18 12 A 01-02-18 15 A 01-03-18 18 A 02-01-18 12 B 01-01-18 11 B 01-02-

我正试图绘制一个图来比较4个不同的文件。每个文件都有ID、日期和值。虽然ID和日期保持不变,但每个文件中的值都不同。现在我想为ID绘制一个值字段,比如说1月份的7天。结果将是四个不同文件中四个不同值的叠加图。我如何在python中实现这一点?我想让它尽可能自动化,而不需要几个手动步骤。谢谢你的帮助

下面的示例数据集
样本数据集1

ID日期值
A 01-01-18 12
A 01-02-18 15
A 01-03-18 18
A 02-01-18 12
B 01-01-18 11
B 01-02-18 19
C 01-01-18 15

样本数据集2

ID日期值
A 01-01-18 13
A 01-02-18 16
A 01-03-18 12
A 02-01-18 13
B 01-01-18 16
B 01-02-18 15
C 01-01-18 13

样本数据集3

ID日期值
A 01-01-18 12
A 01-02-18 12
A 01-03-18 13
A 02-01-18 14
B 01-01-18 15
B 01-02-18 12
C 01-01-18 13

样本数据集4

ID日期值
A 01-01-18 12
A 01-02-18 15
A 01-03-18 14
A 02-01-18 12
B 01-01-18 11
B 01-02-18 14
C 01-01-18 13

根据此样本数据-假设我正在尝试绘制日期01-01-18至01-03-18之间ID“A”的值。因此,我将有一个由4条不同的线组成的图,代表每个数据集的值


我已经能够在Excel中完成这项工作,但它涉及了太多的手动步骤,而且数据是800000行+,因此我不太自信。我相信有一种更好的方法可以用python实现

假设您的数据存储在单独的文本文件中。然后,您可以使用以下代码执行所需操作:

import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import pandas as pd

filenames = ['sample_1.txt', 'sample_2.txt', 'sample_3.txt', 'sample_4.txt']

data = list()

for filename in filenames:
    data.append(pd.read_table(filename, delimiter=' ', parse_dates=[1]))

fig = plt.figure()

for idx in range(len(filenames)):

    condition_1 = data[idx].loc[:, 'ID'] == 'A'
    condition_2 = (
        (data[idx].loc[:, 'Date'] >= '2018-01-01') &
        (data[idx].loc[:, 'Date'] <= '2018-01-03'))

    plt.plot(
        data[idx].loc[condition_1 & condition_2, 'Date'],
        data[idx].loc[condition_1 & condition_2, 'Value'], 'o--')

plt.title('Some figure')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend(filenames)

# X-axis formatting
days = mdates.DayLocator()
days_fmt = mdates.DateFormatter('%Y-%m-%d')
fig.gca().xaxis.set_major_locator(days)
fig.gca().xaxis.set_major_formatter(days_fmt)
将matplotlib.dates导入为mdates
将matplotlib.pyplot作为plt导入
作为pd进口熊猫
文件名=['sample_1.txt'、'sample_2.txt'、'sample_3.txt'、'sample_4.txt']
数据=列表()
对于文件名中的文件名:
data.append(pd.read_表(文件名,分隔符='',解析日期=[1]))
图=plt.图()
对于范围内的idx(len(文件名)):
条件_1=数据[idx]。loc[:,'ID']=='A'
条件_2=(
(数据[idx].loc[:,“日期”]>=“2018-01-01”)&

(数据[idx]。loc[:,'Date']欢迎来到Stack Overflow。当您提供一个或至少一个提供足够数据来演示解决方案的小示例数据集时,像这样的问题更容易帮助您解决。准备和提供好的示例数据可能需要一些额外的工作,但您会发现它可以更快地得到更好的答案。(这对将来有类似问题的人来说会更有帮助。)谢谢andrew,我试图放入一个示例数据,但它在发布时会丢失所有格式。有没有一种方法可以让我在发布时不丢失格式?谢谢,请看一看。简言之,内联代码使用反勾号,较长的块每行缩进4个空格。(该文章中还介绍了一些其他方法。)此外,如果你能展示你迄今为止所做的尝试和没有成功的地方,大多数人都会很感激。即使这不是一个很好的开始,也会让人们觉得他们在帮助你学习,而不是提供免费的咨询解决方案。谢谢普尔卡,我没有尝试过,因为我有一些问题。也许你可以帮助布雷请帮我记下来。我的数据没有列标题,所以我可以添加ID、日期等标题吗?或者不添加标题,我可以使用查找列1作为ID,然后使用列3作为日期,使用列4作为值等。在打印之前,我想将其提取到另一个txt文件中。我的数据也有小时列,因此有w每个日期将有24行数据。@Patrick您所描述的一切都可以通过不太大的修改实现-只需谷歌对代码中的函数进行引用。您需要
pd.read\u table(…,header=None,names=*预定义名称列表*)
mdates.HourLocator()
mdates.DateFormatter(“%Y-%m-%d%H”)
等等。