我有一个大数据集,对于依赖于另一列的一列,我必须取平均值。例如。第1行的平均值,然后当我转到第2行时,我想要第1行和第2行的平均值,依此类推。此外,我的列中有非整数,我只想取整数的平均值,并且希望它跳过那些非整数而不影响平均值。 (包括这些行,但不包括在平均值中)。我当时想写一个for循环,但是我很困惑,不知道如何实现它。任何帮助将不胜感激。
图片显示了dataFrame的一部分。如您所见,第一列基于Complete,NotComplete(并且是日常合规性)。我正在导入一个Excel文件,并尝试对其进行修改,以使其将complete / NotComplete分别变为100%和0%,并添加一个新列以取平均值。但是,我希望平均值保持一致并包括每一天,并在没有输入完整/未完成数据的那一天停止(这是当天和第二天,那里会有数据,因为人们将完成/未完成项目) 。我需要每天跟踪任务的完成情况,最后,添加最后一列,表明如果它们低于85%,则表明它们“不再合规”,但只要它们高于85%,它们即为“仍然合规”。希望这足够清楚。
答案 0 :(得分:1)
我将尝试制作一个名为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
我相信这会有所帮助。