我写了这个代码的两个不同行串连信息:如何比较,然后从使用python的熊猫数据帧
import pandas as pd
import numpy as np
input_table = {'W' : pd.Series([1.1,2.1,3.1,4.1,5.1,6.1], index = ['1','2','3','4','5','6']),
'X' : pd.Series([7.,8.,9.,10.,11.,12.], index = ['1','2','3','4','5','6']),
'Y' : pd.Series(['A','B','C','D','E','E'], index = ['1','2','3','4','5','6']),
'Z' : pd.Series(['First',' ','Last','First',' ','Last'], ['1','2','3','4','5','6'])}
output_table = pd.DataFrame(input_table)
output_table['Previous_Y'] = output_table['Y']
output_table.Previous_Y = output_table.Previous_Y.shift(1)
def Calc_flowpath(x):
if x['Z'] == 'First':
return x['Y']
else:
return x['Previous_Y'] + x['Y']
output_table['Flowpath'] = output_table.apply(Calc_flowpath, axis=1)
print output_table
而且我的输出是(预期):
W X Y Z Previous_Y Flowpath
1 1.1 7.0 A First NaN A
2 2.1 8.0 B A AB
3 3.1 9.0 C Last B BC
4 4.1 10.0 D First C D
5 5.1 11.0 E D DE
6 6.1 12.0 E Last E EE
然而,我想要做的Flowpath功能是:
If Column Z is "First", Flowpath = Column Y
If Column Z is anything else, Flowpath = Previous Flowpath value + Column Y
Unless Column Y repeats the same value, in which case skip that row.
我的目标输出是:
W X Y Z Previous_Y Flowpath
1 1.1 7.0 A First NaN A
2 2.1 8.0 B A AB
3 3.1 9.0 C Last B ABC
4 4.1 10.0 D First C D
5 5.1 11.0 E D DE
6 6.1 12.0 E Last E DE
为了给出上下文,这些行是制造过程中的步骤,并且我试图描述通过作业车间的路径材料。我的数据是大量的客户订单和他们在制造过程中采取的每一步。 Y是制造步骤,Z列表示每个订单的第一步和最后一步。我使用Knime来做分析,但是我找不到一个可以做到这一点的节点,所以我试图自己写一个python脚本,尽管我是编程新手(正如你可能会看到的那样)。在我以前的工作中,我会使用多行节点在Alteryx中完成此操作,但我无法再访问该软件。我花了很多时间阅读熊猫文档,我觉得解决方案是DataFrame.loc,DataFrame.shift或DataFrame.cumsum的一些组合,但我无法弄清楚。
任何帮助将不胜感激。
我鼓励你接受@ Psidom的回答:它确实是你想要的,并且以一种非常优雅的方式 - 当然是最“可爱”的。 –