2016-12-07 42 views
0

我的輸入數據幀: 輸入數據幀:熊貓如下按組計算最低timedelta

Input1 = pd.DataFrame({'LOT': {0: 'A1', 1: 'A2', 2: 'A3', 3: 'A4', 4: 'A5'}, 
'OPERATION': {0: 100.0, 1: 100.0, 2: 100.0, 3: 100.0, 4: 100.0}, 
'TXN_DATE': {0: '12/6/2016', 
    1: '12/5/2016', 
    2: '11/30/2016', 
    3: '11/27/2016', 
    4: '11/22/2016'}}) 

Input2 = pd.DataFrame({'LOT': {0: 'B1', 1: 'B2', 2: 'B3', 3: 'B4', 4: 'B5', 5: 'B6'}, 
'OPERATION': {0: 500, 1: 500, 2: 500, 3: 500, 4: 500, 5: 500}, 
'TXN_DATE': {0: '12/7/2016', 
    1: '12/3/2016', 
    2: '11/17/2016', 
    3: '11/22/2016', 
    4: '12/4/2016', 
    5: '12/3/2016'}}) 

我有意思,從輸入2計算的同伴很多很多基於最小輸入1臺TXN_DATES它們之間的增量(時間增量假設是最小的):

最終數據框:

Expected_out = pd.DataFrame({'COMPANION_LOT': {0: 'B5', 1: 'B5', 2: 'B4', 3: 'B4', 4: 'B4'}, 
'COMPANION_LOT TXN_DATE': {0: '12/4/2016', 
    1: '12/4/2016', 
    2: '11/22/2016', 
    3: '11/22/2016', 
    4: '11/22/2016'}, 
'LOT': {0: 'A1', 1: 'A2', 2: 'A3', 3: 'A4', 4: 'A5'}, 
'OPERATION': {0: 100, 1: 100, 2: 100, 3: 100, 4: 100}, 
'TXN_DATE': {0: '12/6/2016', 
    1: '12/5/2016', 
    2: '11/30/2016', 
    3: '11/27/2016', 
    4: '11/22/2016'}})` 

謝謝

+0

你能解釋一下嗎? – jezrael

+0

我的目的是根據這些批次之間的時間增量來查找運行500的批量運行操作100的伴隨批次,即對於每個運行操作500的批次,我需要很多運行操作100的批量,並且它們之間的時間間隔最短。希望能幫助到你。 – Felix

+0

最好的是如果添加一些手動公式你用於計數輸出。對於我不清楚爲什麼在輸出中是2列'TXN_DATE',組是按列'操作'? – jezrael

回答

1

您可以使用主要pandas.merge_asof然後map添加新列:

Input1.TXN_DATE = pd.to_datetime(Input1.TXN_DATE) 
Input2.TXN_DATE = pd.to_datetime(Input2.TXN_DATE) 

Input1 = Input1.sort_values('TXN_DATE') 
Input2 = Input2.sort_values('TXN_DATE') 
df = pd.merge_asof(Input1, Input2, on='TXN_DATE', suffixes=('','_COMPANION')) \ 
     .sort_values('LOT') \ 
     .drop('OPERATION_COMPANION', axis=1) 
df['LOT_TXN_DATE'] = df.LOT_COMPANION.map(Input2.set_index('LOT')['TXN_DATE']) 
print (df) 
    LOT OPERATION TXN_DATE LOT_COMPANION LOT_TXN_DATE 
4 A1  100.0 2016-12-06   B5 2016-12-04 
3 A2  100.0 2016-12-05   B5 2016-12-04 
2 A3  100.0 2016-11-30   B4 2016-11-22 
1 A4  100.0 2016-11-27   B4 2016-11-22 
0 A5  100.0 2016-11-22   B4 2016-11-22