【问题标题】:Python Pandas: Compute Mean, Std Deviation, and Count Missing Values for Imported Data SetPython Pandas:计算导入数据集的均值、标准偏差并计算缺失值
【发布时间】:2019-05-01 02:44:03
【问题描述】:

所以我想创建一个表格,显示平均值、标准偏差并计算导入的 CSV 数据文件中两个变量的任何缺失值。 csv 文件如下所示:

Group   Var1   Var2 
1       10     100
1       NA     200
2       30     NA
2       40     NA
3       50     500
3       60     600

所以我的程序将导入这个 CSV 文件,然后使用 pandas 我想生成一个表格,显示平均值、标准偏差并计算缺失值,同时按组数聚合它们。我正在寻找如下所示的输出:

Variables    Missing Values    Group 1     Group 2     Group 3
Var1         1                 mean1(sd1)  mean2(sd2)  mean3(sd3)
Var2         2                 mean1(sd1)  mean2(sd2)  mean3(sd3)

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 我对 Pandas 不是很熟悉,所以不知道如何开始。一位朋友提到 Pandas 可以做到这一点,但没有提及如何做到这一点。如果我能在字典中得到结果,那也可以。

标签: python pandas


【解决方案1】:

用途:

df = pd.DataFrame({'Group':[1, 1, 2, 2, 2],
                  'Var1':[20, np.NaN, 30, 20, np.NaN],
                  'Var2':[np.NaN, np.NaN, 30, 20, 3]})
df
    Group   Var1    Var2
0   1       20.0    NaN
1   1       NaN NaN
2   2       30.0    30.0
3   2       20.0    20.0
4   2       NaN 3.0

miss = len(df) - df.describe().iloc[0,1:]
dfn = df.groupby(['Group'])['Var1','Var2'].apply(lambda x: x.describe()[1:3]).T#.add_suffix('_')
dfn['missing values'] = miss
dfn

输出:

Group   1               2                       missing values
        mean    std     mean        std 
Var1    20.0    NaN     25.000000   7.071068    2.0
Var2    NaN     NaN     17.666667   13.650397   2.0

【讨论】:

    【解决方案2】:

    你可以用下面的代码来做

    >>> import numpy as np
    >>> import pandas as pd
    >>> 
    >>> df = pd.DataFrame([
    ... [1, 10, 100],
    ... [1, np.nan, 200],
    ... [2, 30, np.nan],
    ... [2, 40, np.nan],
    ... [3, 50, 500],
    ... [3, 60, 600]])
    >>> 
    >>> df.columns = ["Group", "Var1", "Var2"]
    >>> 
    >>> groupCol = "Group"
    >>> nan_df = df.isna().groupby(groupCol).sum().transpose()
    >>> nan_df.columns = ['Missing Values']
    >>> std_df = df.groupby(groupCol).std().round(3).transpose()
    >>> mean_df = df.groupby(groupCol).mean().round(3).transpose()
    >>> # get mean and standard deviation into one column
    >>> for i in range(len(mean_df.columns)):
    ...     mean_df.loc[:, mean_df.columns[i]] = mean_df[mean_df.columns[i]].astype(str)+'('+std_df[std_df.columns[i]].astype(str)+')'
    ... 
    >>> # change the column names
    >>> mean_df.columns = ["Group "+ str(each_group) for each_group in mean_df.columns]
    >>> # add missing value data
    >>> mean_df = mean_df.join(nan_df)
    >>> mean_df
                Group 1      Group 2        Group 3  Missing Values
    Var1      10.0(nan)  35.0(7.071)    55.0(7.071)               1
    Var2  150.0(70.711)     nan(nan)  550.0(70.711)               2
    >>> 
    

    以上操作,都使用了dataframes的groupby方法。稍加操作,您就可以轻松获得所需格式的数据。

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 2021-04-08
      • 2014-03-21
      相关资源
      最近更新 更多