我有一个大型csv表,其数据如下:
Loop_3_OP Loop_3_PV Line1_Cleaning Line2_Cleaning time date
59.17 29.63 0 0 18:00:33.239000 2015-11-01
59.17 29.63 0 0 18:00:34.231000 2015-11-01
在整个表格中,Line1_Cleaning和Line2_Cleaning在0和1之间变化,如:
59.17 29.63 0 0 18:06:22.343000 2015-11-01
59.17 29.63 1 0 18:06:34.565000 2015-11-01
59.17 29.63 1 0 18:06:34.565000 2015-11-01
59.17 29.63 1 0 18:06:35.918000 2015-11-01
59.17 29.63 1 0 18:06:35.918000 2015-11-01
59.17 29.63 0 0 18:06:35.929000 2015-11-01
我希望能够在发生转换时只拾取行,例如:
59.17 29.63 1 0 18:06:34.565000 2015-11-01
我可以在迭代行的传统python中做到这一点:
read = csv.reader(ifile)
for row in read :
val= row[2]
if val>lastval:
print val, row[4],"L1 Start Clean"
lastval=val
我想知道是否有人可以提供如果它可以在熊猫中完成。我正在使用Anaconda和iPython,并希望 看看是否可能。
此致
答案 0 :(得分:1)
IIUC你可以使用diff
:
In [16]:
df[df['Line1_Cleaning'].diff() > 0]
Out[16]:
Loop_3_OP Loop_3_PV Line1_Cleaning Line2_Cleaning time \
3 59.17 29.63 1 0 18:06:34.565000
date
3 2015-11-01
因此,这会调用diff
相对于前一行减去行,并过滤它们的差异>0
diff
的输出:
In [17]:
df['Line1_Cleaning'].diff()
Out[17]:
0 NaN
1 0
2 0
3 1
4 0
5 0
6 0
7 -1
Name: Line1_Cleaning, dtype: float64
答案 1 :(得分:1)
我认为您正在寻找当前Line1_Cleaning
大于previous line Line1_Cleaning
的值,然后提取提取线。这只是Line1_Cleaning
的{{1}}更改。
0 to 1
答案 2 :(得分:0)
numpy.diff
在这里可能很有用:计算每列的差异,以及diff!= 0,你会找到行索引。您可以使用布尔值组合两列的差异,并且不要忘记将索引偏移1。
类似的东西:
diff1 = np.diff(table['Line1_Cleaning'])
diff2 = np.diff(...
diff = (diff1 != 0) | (diff2 != 0)
indices = np.arange(len(diff))[diff] + 1
changing_rows = table.ix[indices]
(完全未经测试。)
<小时/> (也许Pandas中也有
diff
函数/方法,但我对numpy更熟悉。)
答案 3 :(得分:0)
如果我理解正确,您希望在#for reading from cache
gnav_cache_data = Rails.cache.read(cache_key)
#to write in cache
Rails.cache.fetch(cache_key, :expires_in => 15.minutes) do
gnav_data_response
end
值为Line1_Cleaning
时选择行。如果是这样,你可以这样做:
1