对数据框列进行平均(例如excel)

时间:2019-08-25 06:36:30

标签: python pandas dataframe

enter image description here

我有一个大数据集,对于依赖于另一列的一列,我必须取平均值。例如。第1行的平均值,然后当我转到第2行时,我想要第1行和第2行的平均值,依此类推。此外,我的列中有非整数,我只想取整数的平均值,并且希望它跳过那些非整数而不影响平均值。 (包括这些行,但不包括在平均值中)。我当时想写一个for循环,但是我很困惑,不知道如何实现它。任何帮助将不胜感激。

图片显示了dataFrame的一部分。如您所见,第一列基于Complete,NotComplete(并且是日常合规性)。我正在导入一个Excel文件,并尝试对其进行修改,以使其将complete / NotComplete分别变为100%和0%,并添加一个新列以取平均值。但是,我希望平均值保持一致并包括每一天,并在没有输入完整/未完成数据的那一天停止(这是当天和第二天,那里会有数据,因为人们将完成/未完成项目) 。我需要每天跟踪任务的完成情况,最后,添加最后一列,表明如果它们低于85%,则表明它们“不再合规”,但只要它们高于85%,它们即为“仍然合规”。希望这足够清楚。

1 个答案:

答案 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

我相信这会有所帮助。