根据大熊猫的条件计算最长的连续时间

时间:2017-12-13 12:25:04

标签: python pandas

我试图从.csv文件中计算出最长的冻结时间。我可以使用data["TX"]访问温度。对于行if data["TX"] < 0,我不知何故得到错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, 
a.bool(), a.item(), a.any() or a.all().

我该如何解决这个问题?

import pandas as pd
with open("klimaat.csv") as f:
    counter = 0
    freeze = 0
    while True:
        line = f.readline()
        if not line:
            break
        if data["TX"] < 0:
            counter += 1
        if data["TX"] >= 0:
            if counter > freeze:
                freeze = counter
                counter = 0
            else:
                counter = 0
    print(freeze)

一段数据文件(&#34; TX&#34;是摄氏温度,乘以10):

STAID   SOUID   DATE    TX  Q_TX
162 100522  19010101    -31 0
162 100522  19010102    -13 0
162 100522  19010103    -5  0
162 100522  19010104    -10 0
162 100522  19010105    -18 0
162 100522  19010106    -78 0
162 100522  19010107    -66 0
162 100522  19010108    -6  0 
162 100522  19010109    42  0

1 个答案:

答案 0 :(得分:3)

data["TX"] < 0给你一个面具。利用它来找到最长的零下温度序列。

import pandas as pd

data = pd.read_csv("klimaat.csv")

i = data['TX'] < 0
j = i.ne(i.shift()).cumsum()

freeze = j[i].value_counts().max()

这里的技巧是获取所有连续的True值组(对应于零下温度)并找到最大的组。

print(freeze)
8

<强>详情

i

0     True
1     True
2     True
3     True
4     True
5     True
6     True
7     True
8    False
Name: TX, dtype: bool


j[i]

0    1
1    1
2    1
3    1
4    1
5    1
6    1
7    1
Name: TX, dtype: int64


j[i].value_counts()

1    8
Name: TX, dtype: int64