2017-03-09 62 views
1

我需要獲取具有特定列值的行作爲鍵 以下是我的熊貓df。使用特定的列值作爲key在熊貓數據框中搜索

>>> data 
    OrderID   TimeStamp ErrorCode Duration   ResponseType \ 
0 3000000 1488948188555841641  NaN  IOC     NaN 
1 3000000 1488948188556444675   0  NaN  NEW_ORDER_CONFIRM 
2 3000000 1488948188556448153   2  NaN   TRADE_CONFIRM 
3 3000001 1488948658787676012  NaN  IOC     NaN 
4 3000001 1488948658787811582   1  NaN  NEW_ORDER_CONFIRM 
5 3000001 1488948658787824862   2  NaN   TRADE_CONFIRM 
6 3000002 1488949064945887091  NaN  IOC     NaN 
7 3000003 1488949109654115659  NaN  IOC     NaN 
8 3000003 1488949109654294973   1  NaN  NEW_ORDER_CONFIRM 
9 3000003 1488949109654299930  16388  NaN CANCEL_ORDER_CONFIRM 

,我需要選擇所有的orderID其中所述持續時間是IOC(很容易) 用作答案orders = data.loc[data.Duration == 'IOC', 'OrderID'].unique()給藥,然後獲得這些行選擇的OrderID其中所述持續時間爲NaN。 OrderID將始終爲3或者只是一個ORDERID(對於其中沒有輸出或空行可以返回,例如OrderID 3000002)

棘手的部分是NEW_ORDER_CONFIRM中的Errorcode是正確的,而TRADE_CONFIRM中的Errorcode或CANCEL_ORDER_CONFIRM是錯誤的。我只想在最終的行輸出中使用這些正確的值。

EXPECTED O/P ROW 1 
    OrderID   TimeStamp ErrorCode Duration   ResponseType \ 
0 3000000 1488948188555841641  0  IOC     TRADE_CONFIRM 

我嘗試使用bash通過使用grep IOC loglife| cut -d, -f1 to get OrderID then grep each OrderID & NaN。但我需要這將是更有效

回答

0

我覺得你可以先拿到哪裏是在DurationIOCOrderID的所有unique值,然後選擇所有NaN通過boolean indexing一個Python的解決方案 - 掩碼由isinisnull創建:

#unique can be omit, but then solution a bit slowier in big df 
orders = df.loc[df.Duration == 'IOC', 'OrderID'].unique() 

df = df[df.OrderID.isin(orders) & df.Duration.isnull()] 
print (df) 
    OrderID   TimeStamp ErrorCode Duration   ResponseType 
1 3000000 1488948188556448153  2.0  NaN   TRADE_CONFIRM 
3 3000001 1488948658787824862  2.0  NaN   TRADE_CONFIRM 
6 3000003 1488949109654299930 16388.0  NaN CANCEL_ORDER_CONFIRM 
+0

謝謝你還可以告訴我如何將數據讀入數據框而不是寫入csv(http://stackoverflow.com/questions/42669216/create-csv-headers-from-log-file-python/42670850?noredirect = 1#comment72473336_42670850 question) – pythonRcpp

+0

我嘗試測試接受soluti在你的文件'ideone_cny805.java'上,是否有正確的輸出?沒有寫入csv的解決方案是創建列表,並在循環中追加數據不是文件,而是列出。然後從輸出列表創建數據幀。 – jezrael

+0

我更新了一下我的問題 – pythonRcpp