数据帧df的“日期时间”列和“ A”,“ B”,“ C”列包含一些温度作为浮点值:
abctemps = {"Datetime": ["2018-01-01", "2018-01-02", "2018-01-03", "2018-01-04", "2018-01-05"],
"A": [1.0,4.5,8.0,11.1,100.2],
"B": [-5.0,-18.1,-7.3,-5000.3,-21.5],
"C": [4,87,3.0,7,81]}
df = pd.DataFrame(abctemps)
df
Datetime A B C
0 2018-01-01 1.0 -5.0 4.0
1 2018-01-02 4.5 -18.1 87.0
2 2018-01-03 8.0 -7.3 3.0
3 2018-01-04 11.1 -5000.3 7.0
4 2018-01-05 100.2 -21.5 81.0
A,B和C列包含温度,但某些值显然太大(或很小)为真(100.2,-5000.3、87、81), 所以我想用上一个(如果不存在上一个,下一个?)替换同一列中的值。因此,例如在A列中,100.2将替换为11.1。或在B列中的-5000.3和-7.3。
所需的输出应如下所示:
Datetime A B C
0 2018-01-01 1.0 -5.0 4.0
1 2018-01-02 4.5 -18.1 4.0
2 2018-01-03 8.0 -7.3 3.0
3 2018-01-04 11.1 -7.3 7.0
4 2018-01-05 11.1 -21.5 7.0
我正在考虑的功能是:
过滤器仅显示给定列中的值大于例如40的行,
抓住该行的.loc
基于该.loc
,在同一列中获取上一行的值
用前一行的值替换错误的值
我将如何执行此操作,或者还有另一种更好的方法? .loc
对此有好处吗?谢谢您的帮助。
编辑:我能够执行以下操作:
def longtozero(col, length):
try:
df.loc[df[col].str.len() > length, col] = df.loc[df.loc[df[col].str.len() > length, col].index[0]-1, col]
df[col] = df[col].astype('float64')
except:
pass
然后使用该列和所需的最大长度来调用该函数,例如:
longtozero("A", 3)
答案 0 :(得分:2)