Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于日期移动数据的智能优雅方式_Python_Python 3.x_Algorithm - Fatal编程技术网

Python 基于日期移动数据的智能优雅方式

Python 基于日期移动数据的智能优雅方式,python,python-3.x,algorithm,Python,Python 3.x,Algorithm,我是Python的新闻记者。我写了一个脚本,帮助我读取、分析、操作工程数据并将其写入csv文件。为了使它完全自动化,我需要能够转换数据(目前在Excel中进行),考虑下面的数据集的例子: 日期\u 1值\u A1值\u B1 日期\u 2值\u A2值B2 日期\u 3值\u A3值B3 日期4值A4值B4 我希望输出如下: 日期\u 1值\u A2值\u B1 日期2值A3值B2 日期\u 3值\u A4值B3 请注意,值A1已消失,最后一行数据已删除。但第二列中的所有数据都转移到了前

我是Python的新闻记者。我写了一个脚本,帮助我读取、分析、操作工程数据并将其写入csv文件。为了使它完全自动化,我需要能够转换数据(目前在Excel中进行),考虑下面的数据集的例子:

  • 日期\u 1值\u A1值\u B1
  • 日期\u 2值\u A2值B2
  • 日期\u 3值\u A3值B3
  • 日期4值A4值B4
我希望输出如下:

  • 日期\u 1值\u A2值\u B1
  • 日期2值A3值B2
  • 日期\u 3值\u A4值B3
请注意,值A1已消失,最后一行数据已删除。但第二列中的所有数据都转移到了前一个时间步


我尝试过几种不同的方法,但它们包括在其他部分之前或之后定位代码的不同部分,以便在被新行覆盖之前从先前读取的行中获取数据。事实证明,这很难遵循,因此,如果计算中存在错误,则很难排除故障。只是想知道是否有一种聪明的方法来实现这一点,请

通过将列表与从第二个位置开始的自身副本相结合,使用zip函数很容易做到这一点:

data = [ ("Date_1", "Value_A1", "Value_B1"),
         ("Date_2", "Value_A2", "Value B2"),
         ("Date_3", "Value_A3", "Value B3"),
         ("Date_4", "Value_A4", "Value B4")]

shifted = [ (d1[0],d2[1],d1[2]) for d1,d2 in zip(data,data[1:]) ]
for line in shifted: print(line)


# ('Date_1', 'Value_A2', 'Value_B1')
# ('Date_2', 'Value_A3', 'Value B2')
# ('Date_3', 'Value_A4', 'Value B3')

让我们看看你试过什么。这应该不难;拆分列,打印时将第二列替换为上一行第二列的值,记住下一次迭代的第二列。第一行是一个角落的情况下,没有以前的第二列回忆。感谢阿兰,这看起来非常聪明和整洁。我很快就会查出来的,再次谢谢。