2017-03-09 27 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

相关问题