我有一个很大的数据集,对于依赖于另一列的其中一列,我必须随时取平均值。例如。第 1 行平均值,然后当我转到第 2 行时,我想要第 1 行和第 2 行的平均值,依此类推。此外,我的列中有非整数,我只想取整数的平均值,并且希望它跳过那些非整数而不影响我的平均值。 (包括这些行,但不包括在平均值中)。我本来想写一个for循环,但我很困惑,不知道如何实现它。任何帮助将不胜感激。
图片显示了dataFrame的一部分。如您所见,第一列基于“完整”、“不完整”(并且是每日合规性)。我正在导入一个 Excel 文件,并尝试对其进行修改,以便将完整/不完整分别变为 100% 和 0%,并添加一个新列来取平均值。但是,我希望平均值保持一致,包括每一天,并在没有输入完成/未完成数据的那一天停止(即当天和第二天,当人们完成/未完成项目时,那里会有数据) 。我需要每天跟踪任务的完成情况,最后添加最后一列,表明如果它们低于 85%,则它们“不再合规”,但只要它们高于 85%,它们就是“仍符合要求”。希望这足够清楚。
最佳答案
我将尝试制作一个名为 df
的示例数据框,并解释您可以做什么。
>> import pandas as pd
>> df = pd.DataFrame(
[
{'Make': 'Skoda', 'Flag': 'no integer'},
{'Make': 'Kia', 'Flag': 1},
{'Make': 'BMW', 'Flag': 0},
{'Make': 'Lexus', 'Flag': 1},
{'Make': 'Mercedes', 'Flag': 0},
]
)
>> df = df[['Make', 'Flag']] # just changing columns order
>> print(df)
Make Flag
0 Skoda no integer
1 Kia 1
2 BMW 0
3 Lexus 1
4 Mercedes 0
您可以通过以下方式检查列类型:
>> df.dtypes
Make object
Flag object
dtype: object
我猜您的列中的列类型与我的 Flag
列中的列类型相同。但是,我可以创建另一列,其中只有“整数”值,其余的将为 NaN。我可以使用 isinstance() 函数来实现这一点。
>> df['Flag_int'] = df['Flag'].apply(lambda flag: flag if isinstance(flag, int) else pd.np.NaN)
>> print(df)
Make Flag Flag_int
0 Skoda no integer NaN
1 Kia 1 1.0
2 BMW 0 0.0
3 Lexus 1 1.0
4 Mercedes 0 0.0
现在,当您准备好数据框时,您可以计算平均值。在您的情况下,您可以结合使用 expanding()
和 mean()
方法。就我而言,结果位于 Flag_int_mean
功能中。
>> df['Flag_int_mean'] = df['Flag_int'].expanding().mean()
>> print(df)
Make Flag Flag_int Flag_int_mean
0 Skoda no integer NaN NaN
1 Kia 1 1.0 1.000000
2 BMW 0 0.0 0.500000
3 Lexus 1 1.0 0.666667
4 Mercedes 0 0.0 0.500000
我相信这会有所帮助。
关于python - 像 Excel 一样对数据框列进行平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57643785/