我正在尝试从.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)


一个数据文件(“ TX”是摄氏温度乘以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

最佳答案

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

关于python - 根据 Pandas 的状况计算最长连续时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47792979/

10-17 02:19