Python:通过多种条件过滤csv数据日志的每一行

时间:2019-04-28 22:23:01

标签: python pandas csv data-analysis

我有csv格式的调查数据日志。 677列乘900行。有40个“日期和时间”列和相关的“分数”列,然后是许多“日期和时间”列,后面是一系列药物列。它看起来类似于下表:

  ID |   Date & Time   | Score #1 |   Date & Time   | Score #2 |   Date & Time   | Med 1 | Med 2 |   Date & Time   | Med 1 | Med 2 
 ----|-----------------|----------|-----------------|----------|-----------------|-------|-------|-----------------|-------|------- 
   1 | 4/28/2018 1:27  |        4 | 4/28/2018 2:05  |        9 | 4/28/2018 1:20  | N     | N     | 4/28/2018 2:20  | Y     | N     
   2 | 4/26/2018 15:40 |       11 | 4/27/2018 00:02 |        3 | 4/26/2018 15:50 | Y     | Y     | 4/27/2018 00:02 | N     | N     
   3 | 4/28/2018 4:25  |        5 | 4/28/2018 5:47  |        3 | 4/28/2018 5:11  | N     | Y     | 4/28/2018 6:11  | Y     | N

我想根据以下条件过滤每一行的数据:

  1. 每当服药时,显示出在医疗时间之前所获得的分数。
  2. 忽略没有服用药物的病历。

示例输出为(我将列重命名为希望使其更易于查看):

  ID | #1 Date & Time  | #1 Score | #1 Date & Time  | #1 Med 1 | #1 Med 2 | #2 Date & Time | #2 Score | #2 Date & Time | #2 Med 1 | #2 Med 2 
 ----|-----------------|----------|-----------------|----------|----------|----------------|----------|----------------|----------|---------- 
   1 | 4/28/2018 2:05  |        9 | 4/28/2018 2:20  | Y        | N        |                |          |                |          |          
   2 | 4/26/2018 15:40 |       11 | 4/26/2018 15:50 | Y        | Y        |                |          |                |          |          
   3 | 4/28/2018 4:25  |        5 | 4/28/2018 5:11  | N        | Y        | 4/28/2018 5:47 |        3 | 4/28/2018 6:11 | Y        | N        

我要解决的唯一方法是用蛮力浏览csv的每一行,然后:

  1. 创建一个包含每个日期和时间的列的列表 得分。
  2. 创建一个列列表,其中包含每个Med块的日期和时间。
  3. 浏览每个med块中的“ Y”单元格。
  4. 将该日期/时间与“分数”日期/时间的倒排列表进行比较,以查找在“ Y”开始之前发生的分数。
  5. 将日期/时间,分数,日期/时间,药品...保存到新的CSV列表行。

很好,但是如果将来我需要以其他方式过滤数据的话,它不是很灵活。在研究此问题时,我偶然发现了熊猫,它似乎可以轻松进行这种过滤,但是我不知道该怎么做。还有其他人有更容易/更灵活的解决方案吗?

0 个答案:

没有答案