如何计算特定子集中的平均值并替换值

2024-06-16 12:32:55 发布

您现在位置:Python中文网/ 问答频道 /正文

csv表格:

csv table

所以我有一个csv文件,它有不同的列,比如nodeVolt,Temperature1,temperature2,temperature3,pressure和luminity。在“温度”列下,有许多单元格的值是错误的(即220)。我想通过取前10个单元格的平均值来替换该单元格中的值。我希望通过在该特定列中查找值为220的所有单元格,并替换为同一列中前10个值的平均值来动态运行

我能够在那个特定问题中搜索包含220个的单元格,但无法获取平均值并替换它

import pandas as pd 
import numpy as np 

data = pd.read_csv(r"108e.csv")
data = data.drop(['timeStamp','nodeRSSI','packetID', 'solarPanelVolt', 'solarPanelBattVolt',  
                  'solarPanelCurr','temperature2','nodeVolt','nodeAddress'], axis = 1) 

df =  pd.DataFrame(data)

df1 = df.loc[lambda df: df['temperature3'] == 220]

print(df1)

for i in df1:
    df1["temperature3"][i] == df["temperature3"][i-11:i-1, 'temperature3'].mean()

Tags: 文件csvimportdfdataas表格平均值
1条回答
网友
1楼 · 发布于 2024-06-16 12:32:55

给你:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "something": 3.37,
        "temperature3": [
            31.94,
            31.93,
            31.85,
            31.91,
            31.92,
            31.89,
            31.9,
            31.94,
            32.06,
            32.16,
            32.3,
            220,
            32.1,
            32.5,
            32.2,
            32.3,
        ],
    }
)

# replace all 220 values by NaN
df["temperature3"] = df["temperature3"].replace({220: np.nan})

# fill all NaNs with an shifted rolling average of the last 10 rows
df["temperature3"] = df["temperature3"].fillna(
    df["temperature3"].rolling(10, min_periods=1).mean().shift(1)
)

结果:

    something   temperature3
0   3.37    31.940
1   3.37    31.930
2   3.37    31.850
3   3.37    31.910
4   3.37    31.920
5   3.37    31.890
6   3.37    31.900
7   3.37    31.940
8   3.37    32.060
9   3.37    32.160
10  3.37    32.300
11  3.37    31.986
12  3.37    32.100
13  3.37    32.500
14  3.37    32.200
15  3.37    32.300

(下次请提供一些样本数据作为代码,而不是图像)

相关问题 更多 >