我寫了這個代碼的兩個不同行串連信息:如何比較,然後從使用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的回答:它確實是你想要的,並且以一種非常優雅的方式 - 當然是最「可愛」的。 –