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